Three.Js中的四元数 - 将物体夹到景观

时间:2016-09-28 20:32:22

标签: javascript object three.js landscape quaternions

我在一年前创建了一个小坦克游戏,作为使用three.js和WebSockets的概念证明。然而,在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函数返回一个标准化向量,指示坦克应该倾斜的方向(根据坦克位置的横向坡度计算)。 当代码工作时,坦克移动就像在这个视频中一样:https://www.youtube.com/watch?v=CMNllyqq_O0

现在有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了答案。如果有其他人在将旧的Three.JS中的四分之一移植到以后有问题,那就是它的完成方式(版本81):

取代:

tankmesh.quaternion = q2;

使用:

tankmesh.setRotationFromQuaternion(q2);