尽管相机和节点共享原点,但SceneKit相机旋转错误

时间:2015-04-28 02:39:56

标签: ios swift scenekit

我正在玩SceneKit试图创造一个明星场。以下是一些坐标为:

的样本星
Name: Alpheratz, X: 25.9746 Y: 0.951042 Z: 14.4613
Name: Caph, X: 8.60001 Y: 0.344589 Z: 14.4095
Name: Algenib, X: 115.664 Y: 6.68732 Z: 31.4421
Name: Ankaa, X: 19.0837 Y: 2.19828 Z: -17.4833
Name: Shedir, X: 37.9848 Y: 6.78448 Z: 58.3796
Name: Diphda, X: 27.5836 Y: 5.31046 Z: -9.11979
Name: 96 G. Psc, X: 7.25837 Y: 1.5555 Z: 0.686093
Name: Van Maanen's Star, X: 4.14696 Y: 0.903519 Z: 0.400348
Name: Cih, X: 79.8367 Y: 20.168 Z: 146.837

(坐标来自HYG Database.

SceneView只是故事板中添加的全窗口视图。场景,相机等的设置如下:

let scene = SCNScene()
sceneView.scene = scene
let camera = SCNCamera()
camera.usesOrthographicProjection = true
let cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3Make(0.0, 0.0, 0.0)
scene.rootNode.addChildNode(cameraNode)

然后我为每个明星做:

        let starGeometry = SCNSphere(radius: CGFloat(1.0))
        let starNode = SCNNode(geometry: starGeometry)
        starNode.transform = SCNMatrix4MakeTranslation(star.cartesianX.floatValue, star.cartesianY.floatValue, star.cartesianZ.floatValue)
        scene.rootNode.addChildNode(starNode)

这会在视图中生成一些阴影球体,但它们看起来位于错误的位置,并且它们围绕屏幕右侧的某个点旋转。

我期望看到的是所有球体围绕相机旋转。当他们移动时,他们不应该改变表面尺寸或摆脱相机,这是他们所做的。随着更多的恒星被绘制,即使完全缩小也很难找到任何东西,一旦平移被应用,一切都会消失。

如何将相机固定在原点,并将所有物体定位在原点周围,以便它们围绕该点旋转?

1 个答案:

答案 0 :(得分:1)

  

我期望看到的是所有球体围绕相机旋转。当他们移动时,他们不应该改变表面尺寸或摆脱相机,这是他们所做的。随着更多的恒星被绘制,即使完全缩小也很难找到任何东西,一旦平移被应用,一切都会消失。

你是如何实施相机行为的? 你绝对不应该依赖allowsCameraControl,这样可以方便快速入门。