【问题标题】:navigation along the inside surface of a sphere warps at the north pole沿着球体内表面的导航在北极弯曲
【发布时间】:2021-03-10 16:27:47
【问题描述】:

我正在尝试创建一种空心地球类型的导航,沿着球体的内表面移动,但我正在做的旋转计算似乎有问题。在南极转动和移动是可以的,但是你越靠近北极它就越弯曲,所以你面对北极。我正在使用四元数,所以我认为这不应该是万向节锁定问题。以下是相关代码:

function forwardQuaternion() {
  const q1 = new THREE.Quaternion().setFromUnitVectors(axisY(), axisUp());
  const q2 = new THREE.Quaternion().setFromAxisAngle(axisY(), playerAngle);
  return q1.multiply(q2);
}
function getForwards() {
  return axisX().applyQuaternion(forwardQuaternion());
}

这是一个工作示例https://codesandbox.io/s/threejs-playground-forked-rokm7?file=/src/index.js:2079-2259

WASD 移动。如果您向前走到北极(用红色框标记)并尝试转身离开它,那么当您移动时,您会再次弯曲以再次面对它。我一直在网上寻找答案并扯掉我的头发,所以如果有人有任何想法,我将永远感激你!

【问题讨论】:

    标签: math three.js rotation game-development quaternions


    【解决方案1】:

    这不是真正的火箭科学,您当前的方向是球体的单位切线向量,向前或向后走一小步,添加少量该切线向量并投影到球体表面,以旋转当前方向,向量乘以一个小的外部或内部法线向量。

    【讨论】:

    • 如果它不是真的那么难,那么你能编辑我发布的游乐场以创建一个工作示例吗?
    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多