Three.JS 看看
Three.JS lookat
我有一个对象指向另一个对象。但是当我进行碰撞检测时。他没有看到我用 LookAt
做的旋转希望。但他使用他的默认轮换。他为什么不使用我对 LookAt
所做的旋转希望?
这是问题所在:
蓝色的是默认的。绿色的显示蓝色的 LookAt
.
为什么 LookAt 不影响碰撞检测?
我的碰撞检测:(我制作了一个 RTS 游戏,所以我只使用 X 和 Z)
function collisionXZ(o1, o2) {
if (Math.abs(o1.position.x - o2.position.x) > (o1.geometry.parameters.width + o2.geometry.parameters.width) / 2)
return false;
if (Math.abs(o1.position.z - o2.position.z) > (o1.geometry.parameters.depth + o2.geometry.parameters.depth) / 2)
return false;
return true;
}
THREE.Object3D.lookAt()
更改对象的 rotation
,而不是其 position
。
因此,如果要测试这两个矩形是否碰撞,则必须考虑 rotation
。
您的函数看起来像一个 AABB test,它(在大多数情况下)仅在碰撞检测系统的 广泛阶段 中使用。基本上,此测试的目的是检测哪个对象可能发生碰撞,以避免不必要的贪婪碰撞测试,但它不是真正的碰撞测试本身。
我认为你最好使用提供原始测试的碰撞检测库(Rectangle over Rectangle,Rectangle over Circle,...)
我有一个对象指向另一个对象。但是当我进行碰撞检测时。他没有看到我用 LookAt
做的旋转希望。但他使用他的默认轮换。他为什么不使用我对 LookAt
所做的旋转希望?
这是问题所在:
蓝色的是默认的。绿色的显示蓝色的 LookAt
.
为什么 LookAt 不影响碰撞检测?
我的碰撞检测:(我制作了一个 RTS 游戏,所以我只使用 X 和 Z)
function collisionXZ(o1, o2) {
if (Math.abs(o1.position.x - o2.position.x) > (o1.geometry.parameters.width + o2.geometry.parameters.width) / 2)
return false;
if (Math.abs(o1.position.z - o2.position.z) > (o1.geometry.parameters.depth + o2.geometry.parameters.depth) / 2)
return false;
return true;
}
THREE.Object3D.lookAt()
更改对象的 rotation
,而不是其 position
。
因此,如果要测试这两个矩形是否碰撞,则必须考虑 rotation
。
您的函数看起来像一个 AABB test,它(在大多数情况下)仅在碰撞检测系统的 广泛阶段 中使用。基本上,此测试的目的是检测哪个对象可能发生碰撞,以避免不必要的贪婪碰撞测试,但它不是真正的碰撞测试本身。
我认为你最好使用提供原始测试的碰撞检测库(Rectangle over Rectangle,Rectangle over Circle,...)