glOrtho,gluOrtho2D,glFrustum,glViewport解析

来源:互联网 发布:联通网络如何报修 编辑:程序博客网 时间:2024/05/17 01:11

glOrtho

glOrtho函数生成矩阵与当前矩阵相乘

void glOrtho(

  GLdoubleleft,

  GLdoubleright,

  GLdoublebottom,

  GLdoubletop,

  GLdoublezNear,

  GLdoublezFar

);

 

参数

left, right

剪接面左右纵面坐标。

bottom, top

剪接面上下水平面坐标

zNear, zFar

剪接面近处和远处深度距离。他们的距离为负数,平面将落于视图的后面

说明

glOrtho函数描述投影矩阵 (左,下,近)和(左,上,近)参数分别表示近平面,即窗口下左和上右的角点。假定眼睛的位置为(0, 0, 0)。那么远平面距离参数表示远剪切面的位置。近平面和远平面参数可以是任何的正数或者负数。相应矩阵为:

其中:

当前矩阵乘以这个矩阵得到结果代替当前矩阵。如:如果当前矩阵为M,Ortho矩阵为O,那么M被M*O代替。

使用glPushMatrixglPopMatrix 保存和恢复当前矩阵堆。使用glMatrixMode设置当前矩阵。

下面函数获取描述glOrtho的信息:

glGet withargument GL_MATRIX_MODE

glGet with argumentGL_MODELVIEW_MATRIX

glGet with argumentGL_PROJECTION_MATRIX

glGet with argumentGL_TEXTURE_MATRIX

gluOrtho2D

gluOrtho2D函数定义了一个二维正交投影矩阵

void gluOrtho2D(

 GLdouble left,

 GLdouble right,

 GLdouble bottom,

 GLdouble top

);

参数

left, right

剪接面左右纵面坐标。

bottom, top

剪接面上下水平面坐标

说明

The gluOrtho2D 函数设置的二维正交投影范围,这是相当于调用了 near = 1 和far = 1的glOrtho

glFrustum

glFrustum函数,生成投影矩阵与当前矩阵相乘

void glFrustum(

 GLdouble left,

 GLdouble right,

 GLdouble bottom,

 GLdouble top,

 GLdouble znear,

 GLdouble zfar

);

参数

参数

left, right

剪接面左右纵面坐标。

bottom, top

剪接面上下水平面坐标

zNear, zFar

剪接面近处和远处深度距离。他们的距离为负数,平面将落于视图的后面

说明

glFrustum函数描述投影矩阵 (左,下,近)和(左,上,近)参数分别表示近平面,即窗口下左和上右的角点。假定眼睛的位置为(0, 0, 0)。那么远平面距离参数表示远剪切面的位置。近平面和远平面参数必须是正数。相应矩阵为:

glFrustum函数相乘当前矩阵得到的结果,代替当前矩阵。如果M是当前矩阵,F是frustum投影矩阵,那么glFrustum将使M = M·F。

使用glPushMatrix 和 glPopMatrix保存和恢复当前矩阵。

深度缓存精度受znear和zfar的影响。zfar和znear的比率越大,生成两个面的深度差别越大。如果:

roughly log (2) r bits of depth buffer precision arelost. Because r approaches infinity as znear approaches zero, youshould never set znear to zero.(这个地方没搞懂,请高人指点,哈哈哈哈)

关于glFrustum的相关信息通过下面函数获取:

glGet with argument GL_MATRIX_MODE

glGetwith argument GL_MODELVIEW_MATRIX

glGetwith argument GL_PROJECTION_MATRIX

glGetwith argument GL_TEXTURE_MATRIX

 

glViewport

glViewport函数设置视口

void glViewport(

  GLintx,

  GLinty,

 GLsizei width,

 GLsizei height

);

参数

x, y

视口矩形的左下角位置,像素为单位。默认为(0,0).

width, height

分别表示视口的宽度和高度。当OpenGL设备首先连接到窗口,width height为窗口尺寸。

说明

glViewport函数指明x和y有规范的设备坐标到窗口坐标的仿射变换。设(xnd,ynd)是规范的设备坐标。窗口坐标为(xw,yw),那么计算如下:

视口的宽度和高度是在执行过程中是不变的。这个范围可以调用glGet和参数GL_MAX_VIEWPORT_DIMS获得。

下面函数获取glViewport相关信息:

glGet with argument GL_VIEWPORT

glGetwith argument GL_MAX_VIEWPORT_DIMS

原创粉丝点击