2016-09-28 54 views
0

一年前,我创建了一个小型坦克游戏,作为使用three.js和WebSockets的概念验证。然而在Three.js的后期版本中,做四元数的方式已经改变了。我找不到如何在最新版本中执行的示例代码。这是我的旧代码:Three.Js中的四元数 - 将物体夹到风景

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; 
} 

的getLandscapeNormal函数返回指示该罐schould倾斜的方向(在坦克的位置从景观的斜率计算)的归一化矢量。 当代码的工作,坦克移动就像在这个视频:https://www.youtube.com/watch?v=CMNllyqq_O0

任何人都可以帮助我如何做这个计算现在?

回答

0

我找到了答案。如果任何人有从旧three.js所移植quarternions以后的问题,这是它是如何做(81版):

取代:

tankmesh.quaternion = q2; 

有:

tankmesh.setRotationFromQuaternion(q2); 
+0

'tankmesh.quaternion .copy(q2);'是做它的方法。 – WestLangley

相关问题