我没有使用任何引擎,而是尝试使用 verlet 整数来构建我自己的软体动力学。我制作了一个由 4x4 点定义的立方体,其形状保持如下:
我的点与场景的边缘发生碰撞,它似乎工作正常。虽然我确实遇到了一些点本身塌陷的情况,它会产生凹痕而不是保持其盒子形状。例如,如果它的速度足够高并且它降落在它的角落,它往往会崩溃:
解决碰撞时,我一定是做错了什么或有问题。这是我的处理方式。它是用 Javascript 编写的,尽管语言无关紧要,请随时用任何语言回复:
sim = function() {
// Sim all points.
for (let i = 0; i < this.points.length; i++) {
this.points[i].sim();
}
// Keep in bounds.
let border = 100;
for (let i = 0; i < this.points.length; i++) {
let p = this.points[i];
let vx = p.pos.x - p.oldPos.x;
let vy = p.pos.y - p.oldPos.y;
if (p.pos.y > height - border) {
// Bottom screen
p.pos.y = height - border;
p.oldPos.y = p.pos.y + vy;
} else if (p.pos.y < 0 + border) {
// Top screen
p.pos.y = 0 + border;
p.oldPos.y = p.pos.y + vy;
}
if (p.pos.x < 0 + border) {
// Left screen
p.pos.x = 0 + border;
p.oldPos.x = p.pos.x + vx;
} else if (p.pos.x > width - border) {
// Right screen
p.pos.x = width - border;
p.oldPos.x = p.pos.x + vx;
}
}
// Sim its segments.
let timesteps = 20;
for (let ts = 0; ts < timesteps; ts++) {
for (let i = 0; i < this.segments.length; i++) {
this.segments[i].sim();
}
}
}
如果我需要发布任何其他详细信息,请告诉我。