ARKit - iOS中的SCNNode轮换问题

时间:2017-06-29 12:45:38

标签: ios swift scenekit augmented-reality arkit

我正在尝试通过观看WWDC 2017视频来创建演示应用程序。

let planeNode = SCNNode(geometry: imageplane)
sceneView.scene.rootNode.addChildNode(planeNode) 
var translation=matrix_identity_float4x4
translation.columns.3.z = -0.1
planeNode.simdTransform = matrix_multiply(currentFrame.camera.transform,
                                          translation)

上面的代码工作正常并正确显示平面。然而,随着时间的推移,它改变了快照的旋转,尝试了不同的方式,但没有任何效果。

任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:2)

在采用相机平移之前更改SCNNode的旋转:

let planeNode = SCNNode (geometry: imageplane)
planeNode.eulerAngles.z = Float.pi / 2

var translation = planeNode.simdTransform
translation.columns.3.z = -0.1
planeNode.simdTransform = matrix_multiply(currentFrame.camera.transform,translation)

sceneView.scene.rootNode.addChildNode(planeNode)

答案 1 :(得分:0)

我遇到了同样的问题,在将相机转换应用到节点之前通过旋转平移矩阵来解决它。

Obj-C中的代码:

SCNNode *planeNode = [SCNNode nodeWithGeometry:imagePlane];

simd_float4x4 translation = planeNode.simdTransform;
translation.columns[3].z = -0.1;
translation =  SCNMatrix4ToMat4(SCNMatrix4Rotate(SCNMatrix4FromMat4(translation), GLKMathDegreesToRadians(90), 0, 0, 1.0));
planeNode.simdTransform = matrix_multiply(currentFrame.camera.transform, translation);

[self.sceneView.scene.rootNode addChildNode:planeNode];