Three.Js 中的四元数 - 将对象钳制到横向
Quaternions in Three.Js - Clamp object to landscape
我一年前创建了一个小型坦克游戏,作为使用 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 函数returns 一个归一化向量,指示坦克应倾斜的方向(根据坦克位置处的地形坡度计算)。
当代码起作用时,坦克就像这个视频中一样移动:https://www.youtube.com/watch?v=CMNllyqq_O0
现在谁能帮我做这个计算吗?
我找到了答案。如果其他人在将四分位数从旧 Three.JS 移植到更高版本时遇到问题,这就是它的完成方式(版本 81):
替换:
tankmesh.quaternion = q2;
与:
tankmesh.setRotationFromQuaternion(q2);
我一年前创建了一个小型坦克游戏,作为使用 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 函数returns 一个归一化向量,指示坦克应倾斜的方向(根据坦克位置处的地形坡度计算)。 当代码起作用时,坦克就像这个视频中一样移动:https://www.youtube.com/watch?v=CMNllyqq_O0
现在谁能帮我做这个计算吗?
我找到了答案。如果其他人在将四分位数从旧 Three.JS 移植到更高版本时遇到问题,这就是它的完成方式(版本 81):
替换:
tankmesh.quaternion = q2;
与:
tankmesh.setRotationFromQuaternion(q2);