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。
我正在为我和我的朋友正在制作的游戏编写服务器。我想将某个玩家在 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。