我正在使用Lazy Foo的教程.我发现glPushMatrix()和glPopMatrix()函数非常混乱.我需要有人来解释如何存储矩阵,如何激活其中一个(如果这就是你所说的)以及来自Lazy Foo网站的代码:
void render()
{
//Clear color buffer
glClear( GL_COLOR_BUFFER_BIT );
//Pop default matrix onto current matrix
glMatrixMode( GL_MODELVIEW );
glPopMatrix();
//Save default matrix again
glPushMatrix();
Run Code Online (Sandbox Code Playgroud)
"打开"然后恢复矩阵服务的目的是什么?
小智 7
矩阵以堆栈形式存储.glPushMatrix推送(复制顶部并推送副本)到此堆栈.glPopMatrix在顶部弹出矩阵.在你的例子中,它们应该被切换,你首先推动然后弹出一个矩阵.
您可以使用GL_MODELVIEW矩阵来更改要绘制的内容.如果模型以0,0,0为中心,则可以使用矩阵平移操作在绘制时将其移动到x,y,z.
假设您要绘制两个对象.一个在x,y,z另一个在a,b,c
translate x, y, z
draw first object
translate a, b, c
draw second object
Run Code Online (Sandbox Code Playgroud)
如果你这样做,你会看到第二个对象是在x + a,y + b,z + c处绘制的,因为第二个翻译被添加到第一个.你需要使用push/pop矩阵来保存和恢复状态
push matrix //no translation at this point
translate x, y, z
draw first object
pop matrix
translate a, b, c
draw second object
Run Code Online (Sandbox Code Playgroud)
当你推动矩阵时,它会保存矩阵的当前状态,假定它位于原点.之后你用x,y,z翻译这个矩阵,当你再次弹出时,这个翻译被"恢复",当你上次推送一个矩阵时,你会弹出回状态.当你翻译成a,b,c这次它起作用,因为我们弹出了最后的翻译操作