CSGL

 

glShadeModel

void glShadeModel(GLenum mode)

 

GL_FLAT/【GL_SMOOTH】缓存

着色技术选择函数

 glClearDepth

GL.glClearDepth(depth);

 

glClearDepth:设置深度缓存的清除值spa

参数code

   depth 指定清除深度缓存时使用的深度值。对象

说明blog

本函数指定用glClear清除深度缓存时所使用的深度值,该值的范围在[0,1]之间。get

glDepthFunc

参数func的值能够为GL_NEVER(没有处理)、GL_ALWAYS(处理全部)、GL_LESS(小于)、GL_LEQUAL(小于等于)、GL_EQUAL(等于)、GL_GEQUAL(大于等于)、GL_GREATER(大于)或GL_NOTEQUAL(不等于),其中默认值是GL_LESS原型

 glHint

void glHint(GLenum target,GLenum mod)

参数说明:it

      target:指定所控制行为的符号常量,能够是如下值class

  • GL_FOG_HINT:指定雾化计算的精度。若是OpenGL实现不能有效的支持每一个像素的雾化计算,则GL_DONT_CARE和GL_FASTEST雾化效果中每一个定点的计算。
  • GL_LINE_SMOOTH_HINT:指定反走样线段的采样质量。若是应用较大的滤波函数,GL_NICEST在光栅化期间能够生成更多的像素段。
  • GL_PERSPECTIVE_CORRECTION_HINT:指定颜色和纹理坐标的差值质量。若是OpenGL不能有效的支持透视修正参数差值,那么GL_DONT_CARE 和 GL_FASTEST能够执行颜色、纹理坐标的简单线性差值计算。
  • GL_POINT_SMOOTH_HINT:指定反走样点的采样质量,若是应用较大的滤波函数,GL_NICEST在光栅化期间能够生成更多的像素段。
  • GL_POLYGON_SMOOTH_HINT:指定反走样多边形的采样质量,若是应用较大的滤波函数,GL_NICEST在光栅化期间能够生成更多的像素段。

      mod:指定所采起行为的符号常量,能够是如下值

  • GL_FASTEST:选择速度最快选项。
  • GL_NICEST:选择最高质量选项。
  • GL_DONT_CARE:对选项不作考虑。

函数说明:

      该函数控制OpenGL在某一方面有解释的余地时,所采起的操做行为。

glLoadIdentity

函数原型:

     void glLoadIdentity(void)

函数说明:

      OpenGL为咱们提供了一个很是简单的恢复初始坐标系的手段,那就是调用glLoadIdentity()命令。该命令是一个无参的无值函数,其功能是用一个4×4的单位矩阵来替换当前矩阵,实际上就是对当前矩阵进行初始化。也就是说,不管之前进行了多少次矩阵变换,在该命令执行后,当前矩阵均恢复成一个单位矩阵,即至关于没有进行任何矩阵变换状态。

      单位矩阵就是对角线上都是1,其他元素皆为0的矩阵。

      当您调用glLoadIdentity()以后,您实际上将当前点移到了屏幕中心:相似于一个复位操做
      1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
      2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。
      3.中心左面的坐标值是负值,右面是正值。
         移向屏幕顶端是正值,移向屏幕底端是负值。
         移入屏幕深处是负值,移出屏幕则是正值。

      glLoadIdentity()该函数的功能是重置当前指定的矩阵为单位矩阵.在语义上,其等同于用单位矩阵调用glLoadMatrix()。可是,在一些状况下,glLoadIdentity()更加效率。

      因为某些缘由可能使得当前矩阵中的元素有一些不肯定的值,这将致使程序对图形对象进行几何变形时获得一个非预期的结果。所以有必要将当前矩阵初始成 一个单位矩阵,即对图形对象不作任何变换。这就是为何在调用过glMatrixMode()命令后,老是要调用该命令的缘由。因为glMatrixMode()命令自己也是一种矩阵变换,它将当前矩阵变成命令参数所规定的形式,若不用单位矩阵来替换它,在此矩阵下绘制出的图形将是难以预计的。

     须要注意的是,用单位矩阵替换当前矩阵并不改变当前矩阵模式。

     应当说明的是,用一个单位矩阵来替换当前矩阵的作法并不是在任何场合下均可以使用。例如,已经进行了3次矩阵变换,而如今打算将当前矩阵恢复到第二次变换后的状态时,该方法将失效。此时可用glPushMatrix()命令将每次变换前的矩阵压入矩阵堆栈,在进行完新矩阵中的各类操做后,再利用glPopMatrix()命令将栈顶的矩阵弹出矩阵堆栈,成为当前矩阵。

glMatrixMode

glMatrixMode()函数的参数,这个函数其实就是对接下来要作什么进行一下声明,也就是在要作下一步以前告诉计算机我要对“什么”进行操做了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理.

若是参数是GL_PROJECTION,这个是投影的意思,就是要对投影相关进行操做,也就是把物体投影到一个平面上,就像咱们照相同样,把3维物体投到2维的平面上。这样,接下来的语句能够是跟透视相关的函数,好比glFrustum()或gluPerspective();

在操做投影矩阵之前,须要调用函数:

glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵

而后把矩阵设为单位矩阵:
glLoadIdentity();
而后调用glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果;


若是参数是GL_MODELVIEW,这个是对模型视景的操做,接下来的语句描绘一个以模型为基础的适应,这样来设置参数,接下来用到的就是像gluLookAt()这样的函数;
如果GL_TEXTURE,就是对纹理相关进行操做
顺便说下,OpenGL里面的操做,不少是基于对矩阵的操做的,好比位移,旋转,缩放,因此,这里其实说的规范一点就是glMatrixMode是用来指定哪个矩阵是当前矩阵,而它的参数表明要操做的目标,GL_PROJECTION是对投影矩阵操做,GL_MODELVIEW是对模型视景矩阵操做,GL_TEXTURE是对纹理矩阵进行随后的操做。

切换当前矩阵.
如.要使用透视(3D).那么先要设置透视投影
glMatrixMode(GL_PROJECTION); //切换到投影矩阵.
//...设置透视投影
设置完成后开始画图,须要切换到 模型视图矩阵 才能正确画图.
glMatrixMode(GL_MODELVIEW);
// 画一个物体A (看起来是3D的),
// 如这时候需画一个 2D效果 的 物体A,那么又须要透视投影

glMatrixMode(GL_PROJECTION); //切换到投影矩阵..
// ..设置正交投影
//..设置完成,切换回模型视图矩阵.....
glMatrixMode(GL_MODELVIEW);
// 再画一个物体A (看起来是2D的)


// 如从头至尾都是画3D/2D, 只需初始化时设置一次.
// 若是有交替,那么就须要glMatrixMode() 切换
// 因这样设置很烦人,因此又有glPushMatrix() 保存当前矩阵

gluPerspective

gluPerspective这个函数指定了观察的视景体(frustum为锥台的意思,一般译为视景体)在世界坐标系中的具体大小,通常而言,其中的参数aspect应该与窗口的宽高比大小相同。好比说,aspect=2.0表示在观察者的角度中物体的宽度是高度的两倍,在视口中宽度也是高度的两倍,这样显示出的物体才不会被扭曲。

glViewport

glViewport在默认状况下, 视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,因此为了选择一个更小的绘图区域,就能够用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将 图像映射到这个矩形中。例如能够对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。
相关文章
相关标签/搜索