Pracuję na interprerze L-systemu i używam kwaternionu jako wewnętrznej reprezentacji rotacji. Muszę wyeksportować wynik do sceny JavaScript w ThreeJs i znalazłem scenę json jako najlepszy sposób na zrobienie tego.Jak używać rotacji kwaternionowej w jsonie Three.js
Znalazłem jeden przykład sceny na https://github.com/mrdoob/three.js/blob/master/examples/scenes/test_scene.js, ale nie ma nic o rotacjach kwaternionów.
Więc użyłem pomoc w http://threejs.org/io/s/quaternion i stwierdził, że THREE.Object3D ma właściwości quaternion i useQuaternion ale wydaje się nie działa, błąd jest podniesiona przez loader sceny (prawdopodobnie ze względu na brak „obrót "atrybut, zobacz EDIT na końcu):
"obj": {
...
"quaternion": [0.38268343236509,0,0,0.923879532511287],
"useQuaternion": true
}
próbowałem również przekonwertować kwaternion do kątów Eulera, ale to przyzwyczajenie praca dla mnie, prawdopodobnie z powodu drugiej kolejności stosowania kątów (zakładam zamówienia Y, Z, X). W powyższym przykładzie kwaternion reprezentuje obrót wokół osi Z (pitch) o 135 stopni, który jest konwertowany na kąty Eulera [pi, pi, pi/4], ale jest wyświetlany niepoprawnie w scenie.
Poniższy rysunek przedstawia bloki, z których każdy jest obrócony o 11 stopni więcej niż w przypadku osi Z. Osie to X (czerwony), Y (zielony) i Z (niebieski). Górna połowa jest nieprawidłowo obracana z powodu niewłaściwego przekształcenia kwaternionu na Euclid (użyłem tej strony do wdrożenia: http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/).
EDIT: Po kolejnym badaniu błąd podniesiony przez loader sceny z powodu braku „rotacji” atrybutu obiektu. Następujące dane wyjściowe nie powodują błędu i scena jest załadowana, ale jest błędna (w taki sam sposób, jak przedstawiony obraz), ponieważ obroty kwaternionów są ignorowane.
"obj": {
...
"rotation": [3.14159265358979,3.14159265358979,0.785398163397449],
"quaternion": [0.38268343236509,0,0,0.923879532511287],
"useQuaternion": true
}
Czy jest więcej do komunikatu o błędzie podniesionego przez program ładujący sceny, coś, co dokładnie mówi, co nie podoba się w przypadku korzystania z kwaternionów? –
OK, przyczyną błędu jest brakujący atrybut "rotacja". Program ładujący sceny prawdopodobnie w ogóle nie ładuje kwaternionów. – NightElfik