opengl c编程中的边界框

时间:2015-12-09 15:14:48

标签: opengl bounding-box

如何围绕我在3DS MAX中创建的3d对象创建边界框,然后在openGL应用程序中使用它?我需要用于碰撞检测的边界框,但我不明白如何将边界框链接到对象。创建对象的函数是:

void drawR2D2(){
if (xrot <= 5.0) xrot = 5.0;

if (xrot >= 70.0) xrot = 70.0;

if (ztransKit2 >= 0.7) ztransKit2 = 0.7;

if (xtransS1 >= 0.2) xtransS1 = 0.2;

if (ztransKit2 <= 0.0) ztransKit2 = 0.0;

if (xtransS1 <= 0.0) xtransS1 = 0.0;


glPushMatrix();
    drawBodyR2();
glPopMatrix();

glPushMatrix();
    glTranslatef(0.0, 1.2, 0.0);
    glScalef(2.85, 2.85, 2.85);
    glRotatef(yrotHead, 0.0, 1.0, 0.0);
    drawHeadR2();
glPopMatrix();

glPushMatrix();
    glScalef(3.5, 3.5, 3.5);
    drawLegsR2();
glPopMatrix();

glPushMatrix();
    glTranslatef(-0.41, 0.45, 0.26);
    glScalef(1.4, 1.4, 1.4);
    glRotatef(xrotKit1, 1.0, 0.0, 0.0);
    drawKit1R2();
glPopMatrix();

glPushMatrix();
    glTranslatef(-0.2, 0.5, 0.0 + ztransKit2);
    glScalef(2.0, 2.0, 2.0);
    glRotatef(zrotKit2, 0.0, 0.0, 1.0);
    drawKit2R2();
glPopMatrix();

glPushMatrix();
    glTranslatef(-0.25 + xtransS1, 0.48, 0.45);
    glScalef(1.55, 1.55, 1.55);
    drawShield1R2();
glPopMatrix();

glPushMatrix();
    glTranslatef(-0.44 + xtransS2, 0.48, 0.37);
    glScalef(1.12, 1.12, 1.12);
    drawShield2R2();
glPopMatrix();
}

其他功能: drawBodyR2() drawHeadR2 等是整个对象的组成部分。

drawBodyR2 的代码例如是:

void drawBodyR2(){
InitModel("r2d2/body.obj", &body);//function to initialize the object
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, bodyId);
glmDraw(body, GLM_SMOOTH | GLM_TEXTURE);
glDisable(GL_TEXTURE_2D);
}

有人能告诉我如何在 drawR2D2 功能导致的对象周围创建一个边界框吗?

1 个答案:

答案 0 :(得分:0)

&#34; best&#34;您可以为碰撞检测构建的框是一个定向边界框(OBB),它是适合该对象的最小可能框。为了做到这一点,你需要学习一些数学(主要是特征向量)并将它们用于OBB(检查this answer以获得有关OBB计算的详细说明)。

请注意:

  1. OBB与OpenGL无关。您可以计算具有模型的OBB / ABB并且从不绘制它。分开任务!
  2. 对于同一模型,OBB永远不应该被计算两次,这是计算无意义的。理想的是预先计算形成您要绘制和存储的每个对象的OBB的8个点的坐标。请记住,这意味着无论您应用于对象的几何变换,还需要将其应用于OBB。