在处理中将物理添加到obj

时间:2014-06-04 23:29:22

标签: processing physics

所以我试图给一个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();
}

我希望你们能帮助我!谢谢!

1 个答案:

答案 0 :(得分:1)

弹跳球的例子是一个非常简单的例子,我想你不能以简单的方式将它应用到圆柱体上。

您可能想查看这些网站:

碰撞检测是在计算机时间内完成的:它意味着它与程序执行的频率相关。例如,对象的速度可能很大,两个渲染周期之间,第一个对象通过第二个对象:不会发生碰撞检测。它们在前一个循环期间没有碰撞,并且在当前循环期间不会发生碰撞。

这就是为什么像Box2D这样的物理“引擎”试图预测碰撞,计算每个物体的边界框。

如果您想在3D中进行准确的碰撞检测,您可以查看在许多游戏和电影中使用的Bullet库:http://bulletphysics.org/wordpress/但学习曲线可能很大。

在您的程序中,您可以尝试为碰撞检测设置一个阈值(并将对象的尺寸添加到其位置,如果您希望整个身体碰撞,而不仅仅是它的中心!):如果您的对象的位置在你的极限和(你的极限+/-一个门槛)之间考虑它是否发生碰撞,但你不会完全避免tunnelling