0

假设我有一个球体和一个在 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();

4

1 回答 1

4

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

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

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

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

平面方程为:

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

球体的方程是:

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

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

于 2013-03-26T06:24:40.650 回答