操作矩阵堆栈

转自:https://blog.csdn.net/snail_hunan/article/details/44596819

OpenGL中的矩阵堆栈有3个,它们分别是模型视图矩阵堆栈,投影矩阵堆栈,纹理矩阵堆栈。
这里写图片描述
矩阵堆栈的结构如上图所示。就是数据结构中的栈,栈中的元素是一个4*4的矩阵。

各个堆栈所能容纳的矩阵最大个数不一样。模型视图矩阵堆栈容纳32个,投影矩阵堆栈容纳2个,纹理矩阵堆栈,这里没说。但是可以通过调用一个函数,去获取矩阵堆栈的最大矩阵个数。glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, GLint *params);这个是去获取模型视图矩阵堆栈的个数。至于获得纹理矩阵堆栈个数,修改第一个参数就可以了。

矩阵堆栈的切换

3个矩阵堆栈,如何选择我当前需要作用的是哪个矩阵堆栈呢?这可以通过函数glMatrixMode来进行切换。比如要切换到投影矩阵堆栈,那么就可以使用glMatrixMode(GL_PROJECTION);

矩阵堆栈的入栈,出栈

堆栈,都有入栈,出栈操作。OpenGL针对这三个矩阵堆栈,使用的入栈,出栈函数是一样的,都是glPushMatrix和glPopMatrix。
这里写图片描述
入栈时,OpenGL会将栈顶的矩阵,拷贝一份,然后放置到栈顶。这样的话,栈中第二的矩阵,就是原来的矩阵,我们再操作矩阵时,其实操作的是栈顶的矩阵,是原来矩阵的一个拷贝。所有glPushMatrix表示“记住原来的位置”,而glPopMatrix则表示从栈顶移除一个矩阵,这样就返回了原来的位置。

OpenGL的入栈、出栈操作,通常用来操作局部坐标,非常管用。比如之前的画汽车轮子,以汽车轮子为中心,需要画几个螺钉,画螺钉之前,先记住轮子的中心位置,然后画一个螺钉,再返回轮子中心,再画另一个螺钉。

OpenGL中的矩阵堆栈有3个,它们分别是模型视图矩阵堆栈,投影矩阵堆栈,纹理矩阵堆栈。
这里写图片描述
矩阵堆栈的结构如上图所示。就是数据结构中的栈,栈中的元素是一个4*4的矩阵。

各个堆栈所能容纳的矩阵最大个数不一样。模型视图矩阵堆栈容纳32个,投影矩阵堆栈容纳2个,纹理矩阵堆栈,这里没说。但是可以通过调用一个函数,去获取矩阵堆栈的最大矩阵个数。glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, GLint *params);这个是去获取模型视图矩阵堆栈的个数。至于获得纹理矩阵堆栈个数,修改第一个参数就可以了。

矩阵堆栈的切换

3个矩阵堆栈,如何选择我当前需要作用的是哪个矩阵堆栈呢?这可以通过函数glMatrixMode来进行切换。比如要切换到投影矩阵堆栈,那么就可以使用glMatrixMode(GL_PROJECTION);

矩阵堆栈的入栈,出栈

堆栈,都有入栈,出栈操作。OpenGL针对这三个矩阵堆栈,使用的入栈,出栈函数是一样的,都是glPushMatrix和glPopMatrix。
这里写图片描述
入栈时,OpenGL会将栈顶的矩阵,拷贝一份,然后放置到栈顶。这样的话,栈中第二的矩阵,就是原来的矩阵,我们再操作矩阵时,其实操作的是栈顶的矩阵,是原来矩阵的一个拷贝。所有glPushMatrix表示“记住原来的位置”,而glPopMatrix则表示从栈顶移除一个矩阵,这样就返回了原来的位置。

OpenGL的入栈、出栈操作,通常用来操作局部坐标,非常管用。比如之前的画汽车轮子,以汽车轮子为中心,需要画几个螺钉,画螺钉之前,先记住轮子的中心位置,然后画一个螺钉,再返回轮子中心,再画另一个螺钉。

猜你喜欢

转载自blog.csdn.net/liujianxun111/article/details/80769563