相关疑难解决方法(0)

使用SceneKit在ARKit中拖动SCNNode

我在ARKit中有一个简单的SCNNode,我试图将它拖到手机上的任何地方.这是我的代码.

 @objc func pan(recognizer :UIGestureRecognizer) {

        guard let currentFrame = self.sceneView.session.currentFrame else {
            return
        }

        var translation = matrix_identity_float4x4
        translation.columns.3.z = -1.5

        let sceneView = recognizer.view as! ARSCNView
        let touchLocation = recognizer.location(in: sceneView)

        let hitTestResult = sceneView.hitTest(touchLocation, options: [:])

        if !hitTestResult.isEmpty {

            print("hit result")

            guard let hitResult = hitTestResult.first else {
                return
            }

            let node = hitResult.node

            node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是阻力很慢而且不平滑.

ios scenekit arkit

11
推荐指数
2
解决办法
3255
查看次数

在ARKit中放置,拖动和删除SCNNode

我正在使用ARKit开展一个小项目.我希望能够在点击时将对象添加到我的AR SceneView,用双击删除它们,然后用平移或拖动拖动主题.

放置对象的初始点击工作正常,但我在移除节点和拖动时遇到了一些问题.

删除和拖动的主要问题是实际上"保持"或单击SCNNode非常困难.大多数结果都没有出现在我添加的SCNNode上.

第二个问题是拖动有点儿错误,SCNNode实际上并没有像我的手指那样在拖动上移动.

我决定在github上创建一个项目,链接在这里:https://github.com/theraad/ARAttempt

但我也会发布我的代码来删除对象并拖动对象:

-(void)handleRemoveObject:(UITapGestureRecognizer *)recognizer {
    NSLog(@"Long Press Fired");
    CGPoint tapPoint = [recognizer locationInView:_sceneView];

    NSArray <SCNHitTestResult *> *result = [self.sceneView hitTest:tapPoint options:nil];

    if ([result count] == 0) {
        return;
    }
    SCNHitTestResult *hitResult = [result firstObject];
    if (hitResult.node) {
        [[hitResult.node parentNode] removeFromParentNode];
    }
}

-(void)moveObject:(UIPanGestureRecognizer *)recognizer {
    NSLog(@"Move object");
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Pan state began");
        CGPoint tapPoint = [recognizer locationInView:_sceneView];
        NSArray <SCNHitTestResult *> *result = [self.sceneView hitTest:tapPoint options:nil];

        if ([result count] == …
Run Code Online (Sandbox Code Playgroud)

objective-c ios scnnode arkit

5
推荐指数
1
解决办法
2990
查看次数

在 ARKit 中获取设备围绕世界原点 y 轴的旋转

当我在 ARKit 中围绕 y 轴旋转我的设备时,我试图计算它的旋转。为了澄清起见,ARKit 中的 y 轴是垂直于地面指向上方的轴。

我使用 eulerangles 来获得相机的旋转,如下所示:

var alpha = sceneView.pointOfView?.eulerAngles.y
Run Code Online (Sandbox Code Playgroud)

这大约在 时有效0=<alpha<pi/2 and when -pi/2<alpha<=0,但是对于应该是其他角度的内容,我得到了错误的读数。我怀疑这与万向节锁定有关,并且我必须以某种方式使用四元数才能获得正确的角度,而不管象限如何。任何帮助深表感谢!

math 3d euler-angles ios arkit

4
推荐指数
1
解决办法
815
查看次数

标签 统计

arkit ×3

ios ×3

3d ×1

euler-angles ×1

math ×1

objective-c ×1

scenekit ×1

scnnode ×1