专栏首页浅探ARKit基于SceneKit的3D模型触碰事件
原创

基于SceneKit的3D模型触碰事件

流程如下:

1.获取到手指在屏幕的位置

2.然后转换到SCNView上

3.然后返回与手指点击方向的所有3D物体

######主要代码如下

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    // 获取到手势的对象
    UITouch *touch = [touches allObjects].firstObject;
    
    // 手势在SCNView中的位置
    CGPoint touchPoint = [touch locationInView:self.jpARSCNView];
    
    //该方法会返回一个SCNHitTestResult数组,这个数组中每个元素的node都包含了指定的点(CGPoint)
    NSArray *hitResults = [self.jpARSCNView hitTest:touchPoint options:nil];
    
    if (hitResults.count > 0) {
        
        SCNHitTestResult * hit = [hitResults firstObject];
        
        SCNNode *node = hit.node;

        if (node.geometry == self.jpBox) {
            NSLog(@"点击了箱子");
            [self removeBox];
            [self addBox];
            
        }
        
    }

}

######设置物理仿真代码如下

SCNBox * box = [SCNBox boxWithWidth:0.18 height:0.18 length:0.18 chamferRadius:0];
        
        self.geometry = box;
        
        SCNPhysicsShape * shape = [SCNPhysicsShape shapeWithGeometry:box options:nil];
        
        self.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:shape];
        
        [self.physicsBody setAffectedByGravity:NO];
        
        self.physicsBody.categoryBitMask = 1;
        self.physicsBody.contactTestBitMask = 2;

代码

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ARKit中控制.dae动画的播放

    4.用时间控制动画--CAAnimation 里的 timeOffset 控制开始时间 duration控制播放时间

  • ARKit 在模型上播放视频(附进度控制)

    国际惯例先上效果图 [Untitled.gif] ####原理 把模型的material 设置成AVPlayer 就可以了 SCNMaterial \*...

  • ARKit制作传送门

    参考Minecode ####效果: 1.从外面看不到模型里面的场景 2.在场景里只可以透过门来看到外面的场景 ####实现思路: 1.先用平面识别在一个平面...

  • 散列表结构 字典与集合

    散列表(Hash Table)结构是字典(Dictionary)和集合(Set)的一种实现方式。散列算法的作用是尽可能快地在数据结构中找到一个值。在散列表上插入...

    py3study
  • python3 函数迭代器

    迭代器协议,是指对象(实例)能够使用next函数获取下一项数据,在没有下一项数据之前触发一个StopIteration异常来终止迭代

    py3study
  • PyQt5--QCheckBox

    py3study
  • 如何用栈实现浏览器的前进和后退?

    这里先介绍一下栈的定义和实现,并介绍它的一些常用的应用,最后再简单实现一个简单的浏览器前进和后退的操作。

    材ccc
  • 一个Python3和Python2的range差异

    Python 3 中执行100000000 in range(100000001)会比Python 2快的非常多。

    用户1416054
  • 【深度】监督&强化学习算法在A股中的应用

    量化投资与机器学习微信公众号
  • python pyqt5仿window任务计划程序

    from PyQt5 import QtCore, QtWidgets import sys,os import win32api import win3...

    用户5760343

扫码关注云+社区

领取腾讯云代金券