2017-08-29 7 views
0

J'ai ce bit de code qui jette une erreur. Cependant, cela fonctionne très bien dans ce jsfiddle. J'essaie de faire pivoter un cube et de le faire pivoter avec les commandes de la boule de commande. Cela fonctionne dans le violon, mais quand je l'amène en studio visuel, il lance cette erreur en chrome, "Impossible de lire la propriété 'multiplierQuaternions' de undefined".façon correcte de mettre en œuvre ce vieux code R70 troisjs pour travailler avec une version plus récente

https://jsfiddle.net/perrinprograms/n6u6asza/668/

C'est le code que je suis en train de mettre en œuvre. Je suppose que c'est parce que le violon utilise une ancienne version de three.js et j'en utilise une plus récente dans mon projet. Est-ce que quelqu'un sait s'il existe un moyen d'écrire correctement cette ligne, "geometry.quaternion"? Merci.

var geometry = new THREE.Geometry(); 

deltaRotationQuaternion = new THREE.Quaternion() 
        .setFromEuler(new THREE.Euler(
         toRadians(deltaMove.y * 0.4), 
         toRadians(deltaMove.x * 0.4), 
         0, 
         'XYZ' 
        )); 
      geometry.quaternion.multiplyQuaternions(deltaRotationQuaternion, geometry.quaternion); 
     } 

Répondre

1

THREE.Geometry n'a pas une propriété quaternion (et de ce que je peux dire, R70 ne l'avait pas non plus).

THREE.Object3Dne ont cette propriété, et est la classe de base pour THREE.Mesh, de sorte que vous pouvez l'utiliser comme ceci:

var myMesh = new THREE.Mesh(geometry, material); 
myMesh.quaternion.multiplyQuaternions(deltaRotationQuaternion, myMesh.quaternion); 

Edit: En regardant votre violon, il semble que vous avez déjà deviné ça, correct?

trois.js r87

+0

OH! Oui. J'ai oublié cela en raison de certaines conventions de nommage déroutantes dans mon projet et aussi parce que je n'avais pas encore mangé le déjeuner. Merci Jim! – totallytypicalcow