Как использовать кватернион вращения в Three.js json scene

Я работаю над интерпретатором L-системы и использую кватернион в качестве внутреннего представления вращения. Мне нужно экспортировать результат в ThreeJs JavaScript scene, и я нашел json scene как лучший способ, как это сделать.

Я нашел один пример сцены на https://github.com/mrdoob/three.js/blob/master/examples/scenes/test_scene.js, но там нет ничего о кватернионных вращениях.

Поэтому я воспользовался помощью на http://threejs.org/io/s/quaternion и обнаружил, что THREE. Object3D имеет свойства quaternion и useQuaternion, но они, похоже, не работают, загрузчик сцены выдает ошибку (возможно, из-за отсутствия атрибута "rotation", см. EDIT в конце):

"obj": {
    ...
    "quaternion": [0.38268343236509,0,0,0.923879532511287],
    "useQuaternion": true
}

Я также пытался преобразовать кватернион в углы Эйлера, но у меня это не работает, возможно, из-за другого порядка применения углов (я предполагаю порядок Y, Z, X). В приведенном выше примере кватернион представляет поворот вокруг оси Z (тангаж) на 135 градусов, который преобразуется в углы Эйлера [pi,pi,pi/4], но в сцене он отображается неправильно.

На следующем рисунке показаны блоки, каждый из которых повернут на 11 градусов больше другого по оси Z. Оси - X (красная), Y (зеленая) и Z (синяя). Верхняя половина повернута неправильно из-за неправильного преобразования кватерниона в Евклид (для реализации я использовал эту страницу: http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/ ).

ilustration of the problem
EDIT: После дальнейшего изучения ошибка, выдаваемая загрузчиком сцены, связана с отсутствием атрибута "rotation" у объекта. Следующий вывод не выдает ошибку и сцена загружается, но неправильно (так же, как показано на рисунке), потому что кватернионные вращения игнорируются.

"obj": {
    ...
    "rotation": [3.14159265358979,3.14159265358979,0.785398163397449],
    "quaternion": [0.38268343236509,0,0,0.923879532511287],
    "useQuaternion": true
}

7
задан NightElfik 6 March 2012 в 10:46
поделиться