2016-09-28 3 views
0

J'ai créé un petit jeu de réservoir il y a un an, comme preuve de concept en utilisant three.js et WebSockets. Cependant dans les versions ultérieures de Three.js cette façon de faire des quaternions a changé. Je ne peux trouver aucun exemple de code de la façon de le faire dans la dernière version. Ceci est mon ancien code:Quaternions dans Three.Js - Coller l'objet au paysage

function calculateQuaternions(tankmesh) { 
    var n = getLandscapeNormal(tankmesh); 
    var q1 = new THREE.Quaternion(); 
    q1.setFromAxisAngle(new THREE.Vector3(0, 1, 0), tankmesh.rotation.y); 
    var q2 = new THREE.Quaternion(); 
    var axis = new THREE.Vector3(0, 1, 0); 
    var theta = Math.acos(axis.dot(n)); 
    axis.cross(n).normalize(); 
    q2.setFromAxisAngle(axis, theta); 
    q2.multiply(q1); 
    tankmesh.quaternion = q2; 
} 

La fonction getLandscapeNormal renvoie un vecteur normalisé indiquant la direction du réservoir schould être incliné (calculée à partir de la pente du paysage à la position des réservoirs). Lorsque le code a fonctionné, le réservoir a bougé comme dans cette vidéo: https://www.youtube.com/watch?v=CMNllyqq_O0

Quelqu'un peut-il m'aider à faire ce calcul maintenant?

Répondre

0

J'ai trouvé la réponse. Si quelqu'un d'autre a des problèmes de portage quarternions de Three.js plus âgés à plus tard, c'est comment on fait (version 81):

remplacer:

tankmesh.quaternion = q2; 

avec:

tankmesh.setRotationFromQuaternion(q2); 
+0

'tankmesh.quaternion .copy (q2); 'est le moyen de le faire. – WestLangley