javascript 如何防止角色在与斜面成一定Angular 移动时旋转

anauzrmj  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(109)

当以一定Angular 移动到碰撞器时,您可以看到问题:https://8observer8.github.io/webgl10-js/lighthouse-oimophysics-webgl-js/

我使用OimoPhysics,但没有这样的标签。这是所有物理引擎共同的任务。有一个球从斜面上滑下来。它将绕着一个轴旋转,该轴指向摩擦力最大的方向。它只能围绕向上的轴旋转,围绕其他轴的旋转被冻结。
我在OimoPhysics GitHub页面上创建了这个问题:https://github.com/saharan/OimoPhysics/issues/65
Cannon ES GitHub页面上的另一个问题,源代码为Three.js:https://github.com/pmndrs/cannon-es/issues/183

但是Ammo.js没有这个问题。我只是用Ammo.js替换了OimoPhysics,问题就解决了:https://8observer8.github.io/webgl10-js/lighthouse-ammo-webgl-js/

Ammo.js也适用于更大的Angular (42度):

eqqqjvef

eqqqjvef1#

我解决了这个问题。按W和S时,需要将旋转因子设置为(0,0,0);按A和D时,需要将旋转因子设置为(0,1,0)。
OimoPhysics和Three.js示例:https://playcode.io/1508199

if (input === "u") {
                /* ... */
                playerBody.setRotationFactor(new OIMO.Vec3(0, 0, 0));
            }

            if (input === "d") {
                /* ... */
                playerBody.setRotationFactor(new OIMO.Vec3(0, 0, 0));
            }

            if (input === "l") {
                /* ... */
                playerBody.setRotationFactor(new OIMO.Vec3(0, 1, 0));
            }

            if (input === "r") {
                /* ... */
                playerBody.setRotationFactor(new OIMO.Vec3(0, 1, 0));
            }

相关问题