OpenGL混淆了推和弹出的顺序
OpenGL confused order of push and pop
我正在努力让我的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();
}
然后在我的车里->绘制场景图这里是的代码
glPushMatrix();
object->Draw();
glPushMatrix();
glPopMatrix();
if(left != nullptr)
{
glPushMatrix();
glPopMatrix();
left->PreOrderDraw();
}
if(right != nullptr)
{
right->PreOrderDraw();
}
glPopMatrix();
因此,这基本上是将我的车轮设置在汽车底座附近,但当它们的位置偏移到应该是的位置时,并不是将它们相对于底座设置
我认为您对矩阵堆栈的工作方式感到困惑。我这么说是因为以下问题:
glPushMatrix( );
glPopMatrix( );
if(left != nullptr)
{
glPushMatrix();
glPopMatrix();
// ...
您无理由多次推送/弹出(除非有遗漏的代码)。
我建议您阅读OpenGL编程指南-第3章-操作矩阵堆栈,幸运的是,它使用汽车及其车轮作为示例来教授如何使用堆栈。
根据我从你的代码中可以看出,你所做的只是多次推送/弹出身份矩阵,而从来没有从它们的来源翻译轮子。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 在 OpenGL 中转换应用顺序让我感到困惑
- 在 OpenGL 中计算矩阵时,转换的正确顺序是什么?
- OpenGL,尽管按逆时针顺序排列,但一些法线还是反转了
- OpenGL计算着色器中线程的执行顺序
- 全局变量的顺序会改变C /OpenGL的性能
- 有人可以解释OpenGL矩阵顺序吗?
- OpenGL的列主要顺序
- OpenGL 命令的执行顺序
- OpenGL命令-顺序或并行
- openGL:使用glm进行转换的顺序是什么
- OpenGL缩放/平移坐标系或语句顺序错误
- OpenGL: Case语句和顺序中的错误
- 为openGL提供3D坐标的顺序是什么?
- OpenGL混淆了推和弹出的顺序
- 在 Opengl 中使用矩阵的正确顺序是什么?
- OpenGL多边形渲染顺序
- OpenGL VBO 绑定顺序