glPushMatrix()函数
glPushMatrix()函数是OpenGL中的一个栈操作函数,用于将当前矩阵压入栈中。
在OpenGL中,矩阵是用来对三维坐标进行变换的工具。例如,使用glTranslatef()函数可以对坐标进行平移变换,使用glRotatef()函数可以对坐标进行旋转变换。
在调用glPushMatrix()函数之后,当前矩阵会被复制一份并压入栈中。这样,在之后的操作中,可以使用栈顶的矩阵进行变换,而不会影响之前的变换。
压入的当前矩阵是什么?
glPushMatrix()函数压入的是当前矩阵,当前矩阵是一个4*4的矩阵,用来存储当前所有变换信息。在OpenGL中,进行坐标变换时,会对当前矩阵进行相应的操作,例如平移、旋转、缩放等。
例如,在调用 glTranslatef(1.0, 0.0, 0.0) 之后,当前矩阵会被更新成平移矩阵,在调用glRotatef(30, 0.0, 1.0, 0.0)之后,当前矩阵会被更新成旋转矩阵。
glPushMatrix() 函数将当前矩阵复制一份并压入栈中,这样就可以在之后的操作中使用栈顶的矩阵进行变换而不会影响之前的变换。
示例:OpenGL一次画三个不同位置的圆柱体
在OpenGL中绘制三个不同位置的圆柱体,可以使用glPushMatrix()和glPopMatrix()函数。
首先,在绘制第一个圆柱体之前调用glPushMatrix(),这样可以将当前矩阵压入栈中。然后在绘制第一个圆柱体时,使用glTranslatef()函数将其平移到需要的位置。接着在绘制第二个圆柱体之前调用glPushMatrix(),并使用glTranslatef()函数将其平移到另一个位置。同理绘制第三个圆柱体。最后,在绘制完第三个圆柱体之后,需要调用glPopMatrix()两次 将矩阵出栈,这样才能保证矩阵变换不会影响后续的渲染。
如果你需要对每个圆柱体做不同的旋转或缩放,那么在glPushMatrix()和glTranslatef()之间增加glRotatef()或glScalef()函数即可。
下面是一个简单的示例,绘制三个不同位置的圆柱体,并将其旋转不同的角度。
glPushMatrix()
glTranslatef(1.0, 0.0, 0.0)
glRotatef(30, 0.0, 1.0, 0.0)
drawCylinder()
glPopMatrix()
glPushMatrix()
glTranslatef(-1.0, 0.0, 0.0)
glRotatef(-30, 0.0, 1.0, 0.0)
drawCylinder()
glPopMatrix()
glPushMatrix()
glTranslatef(0.0, 0.0, 1.0)
glScalef(0.5, 0.5, 0.5)
drawCylinder()
glPopMatrix()
在绘制圆柱体时,需要对每个圆柱体进行不同的平移和旋转变换,所以需要使用glPushMatrix()函数将当前矩阵压入栈中,这样可以保证每个圆柱体之间互不影响。文章来源:https://www.toymoban.com/news/detail-699990.html
使用glPopMatrix()函数可以将当前矩阵从栈中弹出。这样可以保证当前矩阵只包含当前圆柱体的变换。文章来源地址https://www.toymoban.com/news/detail-699990.html
到了这里,关于glPushMatrix/glPopMatrix简介及示例(在不同位置绘制图形)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!