1、 glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei作用
在OpenGL初始化完成之后,我们应该进行一些视图设置。首先是设定视见区域,即告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。我们调用glViewPort函数来决定视见区域:
procedure glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);
其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度。注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。图3.1-1表示了在WindowsGDI中的窗口坐标,而图3.1-2则是OpenGL所定义的窗口坐标。
2、 OpenGL编程的glOrtho()函数使用
正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。
glOrtho就是一个正射投影函数。它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点是(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。所有的near和far值同时为正或同时为负。如果没有其他变换,正射投影的方向平行于Z轴,且视点朝向Z负轴。这意味着物体在视点前面时far和near都为负值,物体在视点后面时far和near都为正值。
3、 void glMatrixMode(GLenum mode)
1).OpenGL中用于指定变换时主要有以下4条命令:
glMatrixMode(GLenum mode);
---用于指定用哪1个矩阵作为当前矩阵,mode用于指定哪一种矩阵栈是其后矩阵操作的目标。mode可取:
GL_MODELVIEW:把其后的矩阵操作施加于造型视图矩阵栈。(默认)
GL_PROJECTION:把其后的矩阵操作施加于投影矩阵栈。
GL_TEXTURE:把其后的矩阵操作施加于纹理矩阵栈。
2)glLoadIdentity();
---将当前矩阵赋值为单位矩阵。
glLoadMatrix(const TYPE *m);
---将矩阵m赋值给当前矩阵,m中包含矩阵的16个值,列优先组成4*4矩阵。
glMultiMatrix(const TYPE *m);
---将m乘于当前矩阵。
在进行造型和视图变换之前,必须调用:
glMatrixMode(GL_MODELVIEW);
在发出投影变换命令之前,需要调用:
glMatrixMode(GL_PROJECTION);glLoadIdentity();
3).glPushMatrix();---把当前矩阵保存在栈顶上;
glPopMatrix();----弹出栈顶上的矩阵,恢复原来的矩阵。
用push和pop的目的是为了保护原来的矩阵在一系列变换操作后被破坏,
这和汇编中保护寄存器的原理一样,push后当前矩阵没有变化,但是一般在push之后都调用glLoadIdentity();将当前矩阵赋值为单位矩阵,然后再操作的
4、glLoadIdentity():该函数的功能是重置当前指定的矩阵为单位矩阵。
在glLoadIdentity()之后我们为场景设置了透视图。glMatrixMode(GL_MODELVIEW)设置当前矩阵为模型视图矩阵,模弄视图矩阵储存了有关物体的信。