假设我有一个球体和一个用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();
答案 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
你可以通过求解这组方程来检查它们是否相交。