我正在研究L系统解释器,并使用四元数作为旋转的内部表示。我需要将结果导出到ThreeJs JavaScript场景,我发现json场景是最好的方法。如何在Three.js json场景中使用四元数旋转
我在https://github.com/mrdoob/three.js/blob/master/examples/scenes/test_scene.js上发现了一个场景的例子,但是没有关于四元数旋转的东西。
所以我用帮助在http://threejs.org/io/s/quaternion和发现,THREE.Object3D具有性能四元和useQuaternion,但它似乎不工作,错误是由现场装载机提高(失踪可能是因为“旋转“属性,请参阅编辑末):
"obj": {
...
"quaternion": [0.38268343236509,0,0,0.923879532511287],
"useQuaternion": true
}
我也试图转换四元数欧拉角,但它不会为我工作,可能是因为应用角度的其他命令,(我假设秩序Y, Z,X)。在上面的例子中,四元数表示围绕Z轴(音高)的135度旋转,将其转换为欧拉角[pi,pi,pi/4],但在场景中显示不正确。
下面的图片显示每个块比Z轴多旋转11度。轴是X(红色),Y(绿色)和Z(蓝色)。由于转换四元数不正确导致Euclid上半部分旋转不正确(我使用此页面实现:http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/)。
编辑:进一步检查后由现场装载机引发的错误是因为对对象失踪“旋转”属性。以下输出不会抛出错误和场景被加载,但它是错误的(以与所示图像相同的方式),因为四元数旋转被忽略。
"obj": {
...
"rotation": [3.14159265358979,3.14159265358979,0.785398163397449],
"quaternion": [0.38268343236509,0,0,0.923879532511287],
"useQuaternion": true
}
有没有更多的由场景加载器引发的错误信息,具体说明什么它不喜欢使用四元数? – 2012-02-29 22:13:57
好的,错误是由于缺少“旋转”属性造成的。场景加载器可能根本不加载四元数旋转。 – NightElfik 2012-03-06 10:47:04