Quaternion este un vector cu patru componente folosit pentru a efectua rotirea.
Vectorii de tip Quaternion au un număr de avantaje față de alte metode de rotire, cum ar fi:
Rotirea cu Quaternions are unele dezavantaje:
Motorul Blend4Web are o serie de funcții pentru a face mai convenabil lucrul cu Quaternion:
Exemple de Quaternion
Trebuie să rotim obiectul cu 60 de grade într-un plan orizontal spre dreapta. Avem un model numit "Cessna" în Blender.
Să salvăm o referință la obiect în variabila avionului:
var aircraft = m_scenes.get_object_by_name("Cessna");Să o rotim:
• O rotație în sensul orar corespunde rotației spre dreapta (adică în direcția negativă)
• 60 de grade = π / 3 radiani.
Prin urmare, obținem:
// compunere quaternionvar quat_60_Z_neg = m_quat.setAxisAngle([0, 0, 1], -Math.PI/3, m_quat.create());// preluarea rotirii vechivar quat_old = m_transform.get_rotation(aircraft);// multiplicare la stânga: quat60_Z_neg * quat_oldvar quat_new = m_quat.multiply(quat_60_Z_neg, quat_old, m_quat.create());// setarea noii rotirim_transform.set_rotation_v(aircraft, quat_new);Versiunea optimizată care nu creează obiecte noi:
// memorarea sirurilor (arrays) ca variabile globalevar AXIS_Z = new Float32Array([0, 0, 1])var quat_tmp = new Float32Array(4);var quat_tmp2 = new Float32Array(4);...// rotiream_quat.setAxisAngle(AXIS_Z, -Math.PI/3, quat_tmp);m_transform.get_rotation(aircraft, quat_tmp2);m_quat.multiply(quat_tmp, quat_tmp2, quat_tmp);m_transform.set_rotation_v(aircraft, quat_tmp);