0

我曾经 SceneKit像 Uber 一样使用 3d 汽车在谷歌地图中使用。我设法使用它并旋转它,但相机在顶部,一旦位置管理器标题更改以查看汽车边缘,我想旋转它。

我尝试更改欧拉角,但效果不佳。我尝试使用默认相机,但我没有找到如何将它放在顶部或左侧或右侧......我只能从 .scn 文件中更改它,但不能在代码中更改。

https://github.com/HilalAH/Uber3dModel

4

1 回答 1

0

仅供参考 - 你有allowsCameraControl = true,可能不想要那个。

这是让您快速入门的方法。

在您的相机上设置一个约束,使其始终注视您的汽车,然后您可以使用简单的向量调整 cameraEye。您可以对汽车的行驶方向进行一些数学运算,然后将 cameraEye 放置在与移动方向相关的任何位置(后部、侧面等),但汽车始终是焦点。

像这样的代码,cameraFocus 是你的车:

class Camera
{
    var cameraEye = SCNNode()
    var cameraFocus = SCNNode()

    init()
    {
            cameraEye.name = "Camera Eye"
            cameraFocus.name = "Camera Focus"

            cameraFocus.isHidden = true
            cameraFocus.position  =  SCNVector3(x: 0, y: 0, z: 0)

            cameraEye.camera = SCNCamera()
            cameraEye.constraints = []
            cameraEye.position = SCNVector3(x: 0, y: 0, z: 20)

            let vConstraint = SCNLookAtConstraint(target: cameraFocus)
            vConstraint.isGimbalLockEnabled = true
            cameraEye.constraints = [vConstraint]
        }
}

确保您已添加相机对象:

scene.rootNode.addChildNode(camera.cameraEye)
scene.rootNode.addChildNode(camera.cameraFocus)
于 2019-08-24T17:11:41.610 回答