我在一年前创建了一个小坦克游戏,作为使用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
现在有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
我找到了答案。如果有其他人在将旧的Three.JS中的四分之一移植到以后有问题,那就是它的完成方式(版本81):
取代:
tankmesh.quaternion = q2;
使用:
tankmesh.setRotationFromQuaternion(q2);