Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openglc编程中的包围盒_Opengl_Bounding Box - Fatal编程技术网

openglc编程中的包围盒

openglc编程中的包围盒,opengl,bounding-box,Opengl,Bounding Box,如何在3DS MAX中创建的三维对象周围创建边界框,然后在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 =

如何在3DS MAX中创建的三维对象周围创建边界框,然后在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();
}
有人能告诉我如何在drawR2D2函数产生的对象周围创建一个边界框吗?

可以为碰撞检测构建的“最佳”框是一个定向边界框(OBB),它是适合对象的最小框。为了做到这一点,你需要学习一些数学(主要是什么特征向量)并将它们用于OBB(查看有关OBB计算的详细说明)

请注意:

  • OBB与OpenGL无关。您可以计算OBB/ABB有一个模型而从不绘制它。把任务分开
  • 对于同一个模型,OBB不应计算两次,这是计算上的荒谬。理想的做法是预先计算8个点的坐标,这8个点构成要绘制和存储的每个对象的OBB。请记住,这意味着无论对对象应用何种几何变换,都需要将其应用于OBB 可以为碰撞检测构建的“最佳”框是定向边界框(OBB),它是适合对象的最小可能框。为了做到这一点,你需要学习一些数学(主要是什么特征向量)并将它们用于OBB(查看有关OBB计算的详细说明)

    请注意:

  • OBB与OpenGL无关。您可以计算OBB/ABB有一个模型而从不绘制它。把任务分开
  • 对于同一个模型,OBB不应计算两次,这是计算上的荒谬。理想的做法是预先计算8个点的坐标,这8个点构成要绘制和存储的每个对象的OBB。请记住,这意味着无论对对象应用何种几何变换,都需要将其应用于OBB
    碰撞与渲染无关。OpenGL用于渲染。因此,除非您打算绘制此边界框,否则OpenGL不会帮助您。@NIcol Bolas好的,但如何在对象周围绘制边界框,以便在场景中移动时不会穿过其他对象,也必须在对象周围有一个边界框。我上面描述的对象是我唯一的移动对象,由键盘和鼠标控制。谢谢。绘制边界框与移动边界框或阻止边界框通过其他对象无关。那么如何在OpenGL中检测碰撞?您不明白“OpenGL对您没有帮助”的哪一部分?OpenGL是一个渲染系统。碰撞检测是物理学的一部分。物理学就是决定你想把东西放在哪里。OpenGL是关于显示这些东西的。碰撞与渲染无关。OpenGL用于渲染。因此,除非您打算绘制此边界框,否则OpenGL不会帮助您。@NIcol Bolas好的,但如何在对象周围绘制边界框,以便在场景中移动时不会穿过其他对象,也必须在对象周围有一个边界框。我上面描述的对象是我唯一的移动对象,由键盘和鼠标控制。谢谢。绘制边界框与移动边界框或阻止边界框通过其他对象无关。那么如何在OpenGL中检测碰撞?您不明白“OpenGL对您没有帮助”的哪一部分?OpenGL是一个渲染系统。碰撞检测是物理学的一部分。物理学就是决定你想把东西放在哪里。OpenGL是关于显示这些东西的。
    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);
    }