所以我试图给一个obj一些物理学,并且使用处理附带的弹跳球的例子,并且我已经做了它而不是一个球作为一个圆柱体,但我找不到让obj拥有物理学的方法。 我正在使用库saito.objloader导入obj。我有这个代码,它是obj的调用
import processing.opengl.*;
import saito.objloader.*;
OBJModel modelCan;
PVector location; // Location of shape
PVector velocity; // Velocity of shape
PVector gravity; // Gravity acts at the shape's acceleration
float rotX, rotY;
void setup() {
size(1028, 768, OPENGL);
frameRate(30);
modelCan = new OBJModel(this, "can.obj", "absolute", TRIANGLES);
modelCan.scale(50);
modelCan.translateToCenter();
modelCan.enableTexture();
location = new PVector(100,100,100);
velocity = new PVector(1.5,2.1,3);
gravity = new PVector(0,0.2,0);
}
void draw() {
background(129);
lights();
// Add velocity to the location.
location.add(velocity);
// Add gravity to velocity
velocity.add(gravity);
// Bounce off edges
if ((location.x > width) || (location.x < 0)) {
velocity.x = velocity.x * -1;
}
if (location.y > height) {
// We're reducing velocity ever so slightly
// when it hits the bottom of the window
velocity.y = velocity.y * -0.95;
location.y = height;
}
if (location.z < -height || location.z > 0) { //note that Zaxis goes 'into' the screen
velocity.z = velocity.z * -0.95;
//location.z = height;
}
println("location x: "+location.x);
println("location y: "+location.y);
println("location z: "+location.z);
println("velocidad x: "+velocity.x);
println("velocidad y: "+velocity.y);
println("velocidad z: "+velocity.z);
pushMatrix();
translate(width/2, height/2, 0);
modelCan.draw();
popMatrix();
}
我希望你们能帮助我!谢谢!
答案 0 :(得分:1)
弹跳球的例子是一个非常简单的例子,我想你不能以简单的方式将它应用到圆柱体上。
您可能想查看这些网站:
碰撞检测是在计算机时间内完成的:它意味着它与程序执行的频率相关。例如,对象的速度可能很大,在两个渲染周期之间,第一个对象通过第二个对象:不会发生碰撞检测。它们在前一个循环期间没有碰撞,并且在当前循环期间不会发生碰撞。
这就是为什么像Box2D这样的物理“引擎”试图预测碰撞,计算每个物体的边界框。
如果您想在3D中进行准确的碰撞检测,您可以查看在许多游戏和电影中使用的Bullet库:http://bulletphysics.org/wordpress/但学习曲线可能很大。
在您的程序中,您可以尝试为碰撞检测设置一个阈值(并将对象的尺寸添加到其位置,如果您希望整个身体碰撞,而不仅仅是它的中心!):如果您的对象的位置在你的极限和(你的极限+/-一个门槛)之间考虑它是否发生碰撞,但你不会完全避免tunnelling。