我曾经 SceneKit
像 Uber 一样使用 3d 汽车在谷歌地图中使用。我设法使用它并旋转它,但相机在顶部,一旦位置管理器标题更改以查看汽车边缘,我想旋转它。
我尝试更改欧拉角,但效果不佳。我尝试使用默认相机,但我没有找到如何将它放在顶部或左侧或右侧......我只能从 .scn 文件中更改它,但不能在代码中更改。
我曾经 SceneKit
像 Uber 一样使用 3d 汽车在谷歌地图中使用。我设法使用它并旋转它,但相机在顶部,一旦位置管理器标题更改以查看汽车边缘,我想旋转它。
我尝试更改欧拉角,但效果不佳。我尝试使用默认相机,但我没有找到如何将它放在顶部或左侧或右侧......我只能从 .scn 文件中更改它,但不能在代码中更改。
仅供参考 - 你有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)