在OpenGL中获得球位置,碰撞

时间:2013-03-26 01:42:46

标签: opengl matrix 3d collision-detection transformation

假设我有一个球体和一个用XY绘制的平面,我可以移动球。 我想知道它是否能击中飞机。 我的想法是:

  

- 获取球体位置(中心)

     

- 将(球体位置(Z坐标)+半径)与坐标Z = 0

进行比较

如果为真,则表示de sphere击中了飞机。

但是如何获得球体位置?我可以使用转换矩阵吗?像:

  

GLfloat矩阵[4] [4];

     

glGetFloatv(GL_MODELVIEW_MATRIX,& matrix [0] [0]);

绘制球体的代码是:

  

glPushMatrix();

     

glTranslatef(1.0,altura_braco,0.0);

     

glScalef(1.0,1.0,1.0);

     

glColor3f(0.0f,1.0f,1.0f);

     

glutSolidSphere(0.2,100.0,100.0);

     

glPopMatrix();

1 个答案:

答案 0 :(得分:4)

我认为你误解了opengl的用途。它的目的只是渲染事物。

话虽如此,它不支持碰撞检测。你必须实现自己,或使用游戏引擎。

  

如果为真,则意味着de sphere击中了飞机。但是如何获得球体位置?

你有球面和平面方程,并使用它们。如果检测到交叉点,则碰撞。 This answer解释了如何检测物体是否与球体相交。

飞机的等式是:

a*x + b*y + c*z = d

并且球体的等式是:

(x-x0)^2 + (y-y0)^2 + (z-z0)^2 = r^2

你可以通过求解这组方程来检查它们是否相交。