OpenGL矩阵API的使用方法

  在OpenGL 1.x中包含了一系列的矩阵操作函数,下面我对这些函数的使用方式做个总结。

  在介绍这些函数之前,我先引入一些数学符号以便更简明的表达我的意思。下面就开始了:

  1,M表示当前矩阵;

  2,R表示旋转矩阵;

  3,S表示缩放矩阵;

  4,T表示平移矩阵;

  5,K[i]表示当前矩阵栈的顶部元素, K表示一个数组,i表示栈的顶部元素的索引;

  6,I表示单位矩阵。

   好了,符号就这么几个,下面开始介绍各个函数的使用方式。

   1,glMatrixMode(int mode);

         这个函数用来设定哪种矩阵为当前的操作矩阵,mode的值可以为以下常量的一种:

        (1) GL_PROJECTION 

        (2) GL_MODELVIEW

        (3) GL_TEXTURE

        (4) GL_COLOR (这个需要ARB_image扩展)

   2,  glLoadIdentity();

        将当前矩阵设置为单位矩阵, 也就是

         M = I.

   3,glPushMatrix();

         将当前矩阵保存到矩阵栈的栈顶,也就是

        K[i++] = M.

        每种矩阵栈的深度是不一样的,MODELVIEW的深度至少为32, 其它类型的深度至少为2.

        每种矩阵栈的最大深度可以用glGetIntegerv方法查询出来,具体如下:

        (1) glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &max) 获取MODELVIEW栈的最大深度

        (2) glGetIntegerv(GL_MAX_PROJECTION_STACK_DEPTH, &max) 获取PROJECTION栈的最大深度

        (3) glGetIntegerv(GL_MAX_TEXTURE_STACK_DEPTH, &max) 获取TEXTURE栈的最大深度

        同样的,去掉MAX_字符可以获取当前栈的深度。

   4,glRotate(float angle, float x, float y, float z)

         在当前矩阵上乘以一个旋转矩阵,也就是

          M = M * R

         angle表示要旋转多少度,该值是个角度值(degree, 0 - 360度)的形式.

         <x, y, z>表示旋转轴,一般为单位向量。

   5,glScale(float x, float y, float z)

         在当前矩阵上乘以一个缩放矩阵, 也就是

          M = M * S

          <x, y, z>表示相对应的顶点坐标的x,y,z的缩放比,默认值都是1.

   6,glTranslatef(float x, float y, float z)

        在当前矩阵上乘以一个平移矩阵, 也就是

          M = M * T

        <x,y,z>表示偏移量。

   7, glPopMatrix()

       将矩阵栈顶部的元素弹出并赋给当前矩阵

       M = K[--i];

  8,glLoadMatrix(GLfloat* m)

        将m的值赋给当前矩阵

       M = m;

  9, glMultMatrix(GLfloat* m)

        在当前矩阵上乘以另一个矩阵m, 也就是

          M = M * m

         

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值