openglc编程中的包围盒
如何在3DS MAX中创建的三维对象周围创建边界框,然后在openGL应用程序中使用它?我需要用于碰撞检测的边界框,但我不知道如何将边界框链接到对象。创建对象的函数是: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 =
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计算的详细说明)
请注意:
碰撞与渲染无关。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);
}