我从外部设备获取加速度计数据,每秒10次,并希望将其反映在3D SceneKit模型上。也就是说,我希望模型根据加速度计数据旋转。这个3D模型是在SketchUp中构建的.dae文件,我正在将其加载到SceneKit场景中。
我目前正试图在SceneKit场景的根节点上进行旋转(这里的self指自定义的SCNView类):
self.scene.rootNode.transform = CATransform3DMakeRotation(angle, x, y, z);
这里有几个问题:
- 它不是沿每个轴旋转特定量,而是沿某个向量固定旋转一定量。是否可以通过更改相对向量值来操纵某个轴旋转多少度?是否应该使用三个CATransform3DRotate,一个用于每个轴来实现变换? - 它每次都会创建一个新的旋转,而不仅仅是旋转与上次读数之间的角度差。例如,如果加速度计数据上次为x: 60˚,y: 40˚,z: -30˚,现在为x: 65˚,y: 45˚,z: -35˚,则模型将沿x轴旋转完整的65˚,而不仅仅是与上次相比的5˚差异(应该如此)。通过从当前读数中减去上次读数来解决这个问题似乎很容易,但我不确定旋转的数学计算如何工作。
我目前正试图在SceneKit场景的根节点上进行旋转(这里的self指自定义的SCNView类):
self.scene.rootNode.transform = CATransform3DMakeRotation(angle, x, y, z);
这里有几个问题:
- 它不是沿每个轴旋转特定量,而是沿某个向量固定旋转一定量。是否可以通过更改相对向量值来操纵某个轴旋转多少度?是否应该使用三个CATransform3DRotate,一个用于每个轴来实现变换? - 它每次都会创建一个新的旋转,而不仅仅是旋转与上次读数之间的角度差。例如,如果加速度计数据上次为x: 60˚,y: 40˚,z: -30˚,现在为x: 65˚,y: 45˚,z: -35˚,则模型将沿x轴旋转完整的65˚,而不仅仅是与上次相比的5˚差异(应该如此)。通过从当前读数中减去上次读数来解决这个问题似乎很容易,但我不确定旋转的数学计算如何工作。
SCNScene *scene = [SCNScene sceneWithURL:url options:nil error:&error];
,其中url
是.dae文件的路径。 - Benjamin Martin