opengl中不设置模型,投影,视口,所绘制的几何图形的坐标只能是-1到1(X轴向右,Y轴向上,Z轴垂直屏幕)。 产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对准场景 从不同位置观察场景(视图变换) (2)对场景进行安排,使各个物体在照片中的位置是我们所希望的 移动,旋转或者放大缩小场景中的物体(模型变换) (3)选择照相机镜头,并调整放大倍数(调焦) 显示物体时,可以选择物体是如何投影到屏幕上(投影变换) (4)确定照片的大小,放大照片还是缩小照片 把图形画下来,是要占据整个屏幕还是屏幕的一部分(视口变换) 三大变换:(都是通过操作矩阵来实现的) 1、模型视图变换 在进行模型视图变换之前,应先设置当前操作的矩阵为"模型视图矩阵",通过设置glMatrixMode( GL_MODELVIEW ),在进行变换 之前把当前矩阵设置为单位矩阵glLoadIdentity();如果不进行单位化,所有的后续操作都是在当前矩阵的前提下进行的。 2、投影变换 投影变换即定义一个可视空间,可视空间以外的物体不会被绘制到屏幕上(从现在起,坐标不在是-1.0到1.0了) opengl支持两种投影,透视投影和正投影,通过设置glMatrixMode( GL_PROJECTION )来操作投影矩阵。 透视投影的主要函数 1、glFrustum() 2、glPerspective( GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far) 创建一个表示对称透视视图平截头体的矩阵,并把它与当前矩阵相乘。fovy是YZ平面上视野的角度,范围【0,180】。aspect是这个平截头体的纵横比,也就是宽度除于高度。near和far值分片是观察点与近侧裁剪平面以及远侧裁剪平面的距离(沿Z轴负方向)这两个值都是正的。 正投影的主要函数 1、glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) 创建一个表示正交平行视景体,并把它与当前矩阵相乘。 2、glOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) 创建一个表示把二维坐标投影到屏幕上的矩阵,并把当前矩阵与它相乘,裁剪区域为矩形。 把像素绘制到屏幕上glViewport()定义视口,前两个参数最左下方,后两个参数宽度和高度。 3、视口变换 在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中。 glViewport( Glint x, Glint y, GLsizei width, GLsizei height );XY指定了视口的左下角,WH指定了视口的高度和宽度。在默认情况下,视口的初始值是(0,0,winwidth,winheight)。 视口的纵横比一般和视景体的纵横比相同。当窗口的大小发生变化时,并不会自动影响视口,应用程序应该检测窗口大小改变事件。 |
Saturday, May 14, 2011
7、Opengl中模型视图 投影 视口
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment