Three.js 如何存储方向?

How does Three.js store direction?

我正在为我和我的朋友正在制作的游戏编写服务器。我想将某个玩家在 3D 平面中注视的方向保持在一个变量中。我正在考虑让它成为一个具有两个弧度变量的对象,即垂直角和水平角。但是我的朋友告诉我按照 Three.js 的存储方式存储它,因为这会让他的生活更轻松。有人可以帮我吗?

您应该复习一下面向游戏开发者的数学系列:https://www.youtube.com/watch?v=sKCF8A3XGxQ&list=PLW3Zl3wyJwWOpdhYedlD-yCB7WQoHf-My&index=1

具体来说,使用向量。您应该将角色或实体的方向/面向角度存储为 Vector3 或 3 维向量。在 THREE.js 中,这是新的 THREE.Vector3( x, y, z )

要获得对象 A 相对于对象 B 的方向,您可以这样做:

var direction = posB.clone().sub( posA )

这克隆了位置 B,所以我们不会通过减法弄乱它,然后立即用 A 减去它。

但是您会注意到向量现在有一些长度。这在计算中通常是不可取的,例如,如果您想将这个方向乘以其他东西,比如推力。在这种情况下,我们需要 规范化 向量:

direction.normalize()

现在您可以做一些有趣的事情,例如:

posA.add( direction.clone().multiplyScalar( 10.0 ) );

这将使 posA 向 posB 方向移动 10 个单位 space。