gpt4 book ai didi

three.js - Cannon.js - 如何防止 block 抖动/摇晃?

转载 作者:行者123 更新时间:2023-12-03 08:58:50 25 4
gpt4 key购买 nike

我将 Cannon.js 与 Three.js 结合使用。我设置了一个场景,其中有 5 列,每列 4 个 block 相互堆叠。

我希望它们能够与我计划添加到场景中的其他对象进行交互。然而,列中的 block 似乎会引起大量的微碰撞,并且随着时间的推移,抖动会偏离位置。我希望他们在互动之前保持完全一致。

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

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

顺便说一句,当场景中存在我没有预料到的这些 block 时,性能也会出现相当大的下降。我计划向场景中添加更多对象,但不确定为什么性能会下降?

这与我的 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;

关于three.js - Cannon.js - 如何防止 block 抖动/摇晃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52853630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com