【问题标题】:ARKit – SCNNode rotation issue in iOSARKit – iOS 中的 SCNNode 旋转问题
【发布时间】:2017-12-03 04:16:56
【问题描述】:

我正在尝试通过观看 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)

上面的代码工作正常并正确显示平面。但是点击它会改变快照的旋转,尝试了不同的方法但没有任何效果。

任何帮助将不胜感激。

【问题讨论】:

  • “它改变了快照的旋转”是什么意思?它应该将快照放在相机前面,与它平行。因此,如果您的相机是转动的,那么快照也会转动
  • @guig 它应该按原样显示屏幕截图。目前它改变了图像的旋转。例如,如果快照处于纵向模式,最终添加的屏幕截图将以横向显示。基本上就像对捕获的图像应用 90 度旋转一样。
  • 这里也一样。有什么想法吗?
  • @monikazee 不。没有想法:(力求为此找到任何解决方案

标签: ios swift scenekit augmented-reality arkit


【解决方案1】:

在采用相机平移之前改变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)

【讨论】:

  • 我试过你的解决方案,只适用于肖像模式。在横向模式下,屏幕截图的方向仍然发生变化。知道如何解决这个问题吗?
【解决方案2】:

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

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];

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 2016-03-18
    • 2013-09-19
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多