我试图让我的opengl应用程序正常工作,基本上在我开始搞乱场景图之前,每个对象都以推动开始绘制然后以流行音乐结束
现在我基本上将两个孩子添加到一辆汽车的基座(车轮),如果我能够发布一些代码,我将在显示调用电话的过程中遇到问题所有的东西,然后显示我的场景图画来绘制,我希望它是一个愚蠢的错误,因为我诚实地卡住了
void GameNode::Draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
car->Draw();
glPopMatrix();
for (int i = 0; i < MAXOBJECTS; i++)
{
glPushMatrix();
objects[i]->Draw();
glPopMatrix();
}
for (int i = 0; i < MAXBUILDINGS; i++)
{
glPushMatrix();
build[i]->Draw();
glPopMatrix();
}
glPushMatrix();
skyBox->Draw();
glPopMatrix();
glFlush();
glutSwapBuffers();
}
然后在我的车 - &gt;画中我有这里的场景图是那个
的代码glPushMatrix();
object->Draw();
glPushMatrix();
glPopMatrix();
if(left != nullptr)
{
glPushMatrix();
glPopMatrix();
left->PreOrderDraw();
}
if(right != nullptr)
{
right->PreOrderDraw();
}
glPopMatrix();
因此,这基本上将我的车轮设置在靠近汽车底座的位置,但当它们的位置偏离它们的位置时,它们不会相对于底座设置它们
答案 0 :(得分:4)
我认为你对矩阵堆栈的工作方式感到困惑。我这说是由于以下问题:
glPushMatrix( );
glPopMatrix( );
if(left != nullptr)
{
glPushMatrix();
glPopMatrix();
// ...
您无缘无故地推/弹多次(除非省略代码)。
我建议你阅读OpenGL Programming Guide - Chapter 3 - Manipulating the Matrix Stacks,幸运的是,你使用汽车,它的轮子作为教导如何使用堆栈的例子。
从我的代码中我可以看出,你所做的就是多次推送/弹出单位矩阵,而无需从原点转换轮子。