我有进行各种变换和设置为glPushMatrix()和glPopMatrix()调用之间的颜色,基本上像这样的代码:的OpenGL:矩阵堆栈的功能
glLoadIdentity();
glPushMatrix();
glPushMatrix();
// C++ code to perform transformations
// C++ code to set colour
// C++ code to draw polygon
glPopMatrix();
// Other similar code "blocks" between calls to glPushMatrix() and glPopMatrix()
glPushMatrix();
// C++ code to perform transformations
// C++ code to set colour
// C++ code to draw polygon
glPopMatrix();
我的理解是一个单位矩阵是在开始时被推入堆栈,随后被代码中的每个连续的“块”复制,转换,呈现和弹出,并且弹出消除了来自先前转换的所有效果。
但是,如果我注释掉,设置在不是最后的块中的任何块的颜色代码,该块现在继承如果施加的颜色,在最后的块
这是有道理的设置颜色到整个堆栈,并因此保留对glPopMatrix()的调用。但是,在最后一个块中创建的多边形看起来是最后呈现的,因为它位于所有其他多边形之上 - 所以我没有看到最终块中设置的颜色如何应用于已经存在的多边形被渲染。
问题:
1)什么属性/效果求生存,以glPopMatrix()的调用?
2)上述代码中的操作顺序是什么?这些块是以相反顺序执行的,是以相反顺序执行的每个块中的代码,还是两者都执行?
我知道你是刚开始学习OpenGL的,但功能,如glPushMatrix,glLoadIdentity和glPopMatrix已被弃用,不再是核心OpenGL标准的一部分。请考虑学习'现代'的OpenGL。 – 2015-02-08 11:01:32
@ Sir.Tiddlesworth:谢谢。我知道这一点。正如我在OP中所说的,这是一个学校作业的起始代码,我必须照原样处理。 – Schemer 2015-02-08 14:41:24