【问题标题】:Quaternions in Three.Js - Clamp object to landscapeThree.Js 中的四元数 - 将对象夹在横向上
【发布时间】:2016-10-01 04:34:41
【问题描述】:

一年前我创建了一个小型坦克游戏,作为使用 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

谁能帮我现在怎么做这个计算?

【问题讨论】:

    标签: javascript object three.js landscape quaternions


    【解决方案1】:

    我找到了答案。如果其他人在将四元数从旧版 Three.JS 移植到更高版本时遇到问题,可以这样做(版本 81):

    替换:

    tankmesh.quaternion = q2;
    

    与:

    tankmesh.setRotationFromQuaternion(q2);
    

    【讨论】:

    • tankmesh.quaternion.copy( q2 ); 是这样做的方法。
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2016-04-26
    • 2018-10-24
    • 2017-09-06
    • 2022-01-18
    相关资源
    最近更新 更多