OpenGL几何变换

OpenGL几何变换

  OpenGL中指定了顶点之后,但在屏幕上显示它们之前,会发生三种类型的变换:视图变换、模型变换和投影变换。OpenGL中一些变换术语如下表:

变换用途
视图(Viewing)指定观察者或照相机的位置
模型(Modeling)在场景中移动物体
模型视图(Modelview)描述视图和模型变换的对偶性
投影(Projection)改变可视区域的大小或重新设置它的形状
视口(ViewPort)伪变换,只是对窗口上的最终输出进行缩放

  视图变换:用于确定场景的拍摄点,也就是在世界坐标系中确定Camera的过程,并将世界坐标系转换到Camera Space,观察方向直行z轴负方向。在进行任何其它变换之前必须先指定视图变换。

  模型变换:用于对模型及模型内部的待定物体进行操纵,可以对物体进行平移、旋转、缩放。

  模型视图对偶性:视图变换与模型变换的效果等同。

&esmp; 投影变换:投影变换指定了一个完成的场景投影到屏幕上的最终图像。常见的投影类型有:正投影与透视投影。

  视口变换:将最终获得的二维图像映射到屏幕上的某个窗口。

  顶点变换管线(管线用于描述一种过程,它可能涉及到两个或更多个独特的阶段和步骤):源顶点数据->模型视图矩阵->经过变换的视觉坐标->投影矩阵->裁剪坐标->透视除法->经过规范化的设备坐标->视口变换->窗口坐标。

  相关的函数

//平移,(x, y, z)平移向量
glTranslatef(x, y, z);

//旋转,angle旋转角度,(x, y, z)旋转轴
glRotatef(angle, x, y, z);

//缩放,(x, y, z)沿各个坐标轴方向的缩放比例
glScalef(x, y, z);

//把当前的矩阵设置为模型视图矩阵,并加载单位矩阵进行重置
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

//矩阵堆栈
glGet(GL_MAX_MODELVIEW_STACK_DEPTH);//模型矩阵堆栈的最大深度
glGet(GL_MAX_PROJECTION_STACK_DEPTH);//投影矩阵堆栈的最大深度
glPushMatrix();//压入矩阵堆栈
glPopMatrix();弹出矩阵堆栈

//透视变换
gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble aNear, GLdouble aFar);
//fovy:垂直方向的视野角度
//aspect:宽度与高度的纵横比
//aNear,aFar:近端和远端裁剪平面之间的距离

//加载矩阵
glLoadMatrixf(const GLfloat *matrix);//列主序加载矩阵
glLoadTransposeMatrixf(const GLfloat *matrix);//行主序加载矩阵

  OpenGL的矩阵顺序为列主序的,即按列逐个遍历矩阵中的元素,如下:

列主序的矩阵顺序:
            [I0, I4, I8, I12]
            [I1, I5, I9, I13]
            [I2, I6, I10, I14]
            [I3, I7, I11, I15]

注意:OpenGL中常采用一维数组来组织二维矩阵,GLfloat matrix[16]。若采用二维数组表示二维矩阵,则矩阵数据在内存中是以行主序存储的。

参考资料
1. OpenGL SuperBible
2. View Transform

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值