【问题标题】:How to place 3D object correctly in ARSCNView using ARKit?如何使用 ARKit 在 ARSCNView 中正确放置 3D 对象?
【发布时间】:2018-09-19 23:43:02
【问题描述】:

我很长时间试图将 3D 对象放置在 SceneView 中的正确位置,该对象正确添加到 SceneView 中,但它的位置向右或向左转动,

func addObject(x: Float = 0, y: Float = 0, z: Float = -0.5) {

    guard let shipScene = SCNScene(named: "art.scnassets/house.scn"),
        let shipNode = shipScene.rootNode.childNode(withName: "house", recursively: false)
    else {
        return
    }
    shipNode.scale = SCNVector3(0.01, 0.01, 0.01)
    shipNode.position = SCNVector3(x,y,z)
    sceneView.scene.rootNode.addChildNode(shipNode)
}

这是我添加的代码,这个问题是否与相机位置有关,我也改变了,它似乎不起作用。 请以附件图片为例。

如何正确放置物体?

【问题讨论】:

    标签: swift scenekit arkit


    【解决方案1】:

    根据您的问题,您似乎需要调整模型的旋转以使其正确定位。

    看到它是一个scn file,您应该可以通过调整模型的Euler AnglesXcode 内的SceneKit Editor 中执行此操作。

    以下内容供您参考:

    Pitch(x 分量)是围绕节点 x 轴的旋转。

    Yaw(y 分量)是围绕节点 y 轴的旋转。

    滚动(z 分量)是围绕节点 z 轴的旋转。

    下面是一个示例,说明在SceneKit Editor 中更改X Eular Angle 的效果:

    如果您想以编程方式执行此操作,您可以通过多种方式执行此操作:

    (a) 通过修改模型的欧拉角,例如

    shipNode.eulerAngles.x = 90
    shipNode.eulerAngles.y = 45
    shipNode.eulerAngles.z = 90
    

    (b) 通过使用 SCNVector4 这是一个

    四分量旋转向量,指定方向 前三个分量中的旋转轴和旋转角度 (弧度)在第四个。

    使用 this 的示例如下:

    ///Rotate The Ship 45 Degrees Around It's Y Axis
    shipNode.rotation = SCNVector4Make(0, 1, 0, .pi / 4)
    

    为了让生活更轻松,您还可以使用以下扩展,以便您可以以度为单位编写所需的旋转,然后转换为 SCNVector4 所需的弧度,例如:

    shipNode.rotation = SCNVector4(0, 1, 0, Float(Int(45).degreesToRadians)))
    
    extension  CGFloat{
    
      /// Converts Degrees To Radians
      var degreesToRadians:CGFloat { return CGFloat(self) * .pi/180}
    
    }
    

    希望对你有帮助...

    【讨论】:

    • 伟大的@josh ..工作完美,解释清楚..非常感谢。
    猜你喜欢
    • 2017-12-18
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多