微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

沿着球体内表面的导航在北极弯曲

如何解决沿着球体内表面的导航在北极弯曲

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

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 移动。如果您向前走到北极(用红色框标记)并尝试转向远离它,那么当您移动时,您会再次扭曲以面对它。我一直在网上搜索答案并撕掉我的头发,所以如果有人有任何想法,我将永远感激你!

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。