Js-如何防止块抖动/摇晃? [英] Cannon.js - How to prevent jittery/shaky blocks?

查看:0
本文介绍了Js-如何防止块抖动/摇晃?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将Cannon.js与Three.js一起使用。我已经设置了一个场景,它有5列,每列4个块,彼此堆叠在一起。

我希望这些对象可以与我计划添加到场景中的其他对象交互。然而,列中的块似乎导致了大量的微碰撞,随着时间的推移,抖动偏离了位置。我希望他们完全保持一致,直到他们与之互动。

如果您查看代码并等待大约20/30秒,您将看到块开始移动。我需要在这些块上设置什么特定内容以防止这种情况发生吗?

这是我整理的一个例子-https://codepen.io/danlong/pen/XxZROj

顺便说一句,当场景中有我意想不到的块时,性能也会有相当大的下降。我计划向场景中添加更多对象,但不确定性能下降的原因?

是否与我的Animate()循环中的以下内容有关?

this.world.step(1 / 30);

专门设置我的‘大炮世界’和‘纵队’的代码如下:

大炮世界:

this.world = new CANNON.World();

this.world.defaultContactMaterial.contactEquationStiffness = 1e6;    
this.world.defaultContactMaterial.contactEquationRegularizationTime = 3;

this.world.solver.iterations = 20;

this.world.gravity.set(0,-25,0);

this.world.allowSleep = true;

this.world.broadphase = new CANNON.SAPBroadphase(this.world);

列:

var geometry = new THREE.BoxBufferGeometry(5,5,5);
var material = new THREE.MeshNormalMaterial();
var shape = new CANNON.Box(new CANNON.Vec3(5/2, 5/2, 5/2));

for (var rows = 0, yPos = 2.5; rows < 4; rows++, yPos+=5) {

    for (var i = -20; i <= 20; i+=10) {

        // physics
        var body = new CANNON.Body({
            mass: 0.5,
            position: new CANNON.Vec3(i, yPos, 0),
            friction: 0.1,
            restitution: 0.3
        });

        body.allowSleep = true;
        body.sleepSpeedLimit = 0.01;
        body.sleepTimeLimit = 1.0;

        body.addShape(shape);

        this.world.addBody(body);
        this.bodies.push(body);

        // material
        var mesh = new THREE.Mesh(geometry, material);

        this.scene.add(mesh);
        this.meshes.push(mesh);
    }
}

推荐答案

试试这个? Body.sleepSpeedLimit=1.0;

这篇关于Js-如何防止块抖动/摇晃?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆