OpenGL--矩阵(一)

目录

1坐标系和矩阵

1.1矩阵

1.2矩阵堆栈和矩阵状态

1.3矩阵操纵命令


1坐标系和矩阵

1.1矩阵

OpenGL使用4X4矩阵对顶点进行变换。使用C/C++的应用程序通常将OpenGL矩阵实例化为一个一维数组。

GLfloat m[16];

以先列后行的方式表示OpenGL矩阵

m[0]        m[4]        m[8]          m[12]

m[1]        m[5]        m[9]          m[13]

m[2]        m[6]        m[10]        m[14]

m[3]        m[7]        m[11]        m[15]

相应地,OpenGL向量也被表示为列:

x

y

z

w

应将OpenGL矩阵视为定义了一个新坐标系。将向量乘以一个矩阵后,该向量将被变换到该矩阵定义的新坐标系。包含元素m[0]到m[]的一个C/C++矩阵m定义了如下新坐标系:

x轴向量为[ m[0] m[1] m[2] ]。

y轴向量为[ m[4] m[5] m[6] ]。

z轴向量为[ m[8] m[9] m[10] ]。

原点为[ m[12] m[13] m[14] ]。

1.2矩阵堆栈和矩阵状态

        OpenGL将矩阵存储在矩阵堆栈中,每种矩阵模式和每个纹理单元都有一个矩阵堆栈。要选择矩阵堆栈,可调用  :      

          GL_MODELVIEW: 把其后的矩阵操作施加于造型视图矩阵栈。(默认) 
           GL_PROJECTION: 把其后的矩阵操作施加于投影矩阵栈。 
           GL_TEXTURE: 把其后的矩阵操作施加于纹理矩阵栈。

glMatrixMode(GLenum mode);

//mode的值

glMatrixMode(GL_MODELVIEW);   //模型视点矩阵堆栈

glMatrixMode(GL_PROJECTION);   // 投影矩阵堆栈

glMatrixMode(GL_TEXTURE);      //纹理矩阵堆栈

1.3矩阵操纵命令

OpenGL提供了一组影响活动矩阵堆栈栈顶的命令。

glLoadIdentity(void);    // 将活动矩阵堆栈的栈顶矩阵替换成单位矩阵  

glLoadMatrix[fd]( const TYPE* m);  //将活动矩阵堆栈的栈顶矩阵替换成矩阵m

glMultMatrix[fd]( const TYPE* m);   //将活动矩阵堆栈的栈顶矩阵乘矩阵m

glRotate[fd]( TYPE theta , TYPE x , TYPE y, TYPE z);   //计算一个绕x、y、z指定的轴旋转theta度的矩阵,然后将活动矩阵堆栈的栈顶矩阵后乘以这个矩阵

glScale[fd]( TYPE x, TYPE y, TYPE z);     //创建一个缩放比例分别为x、y、z的矩阵,然后将活动矩阵堆栈的栈顶矩阵后乘以这个矩阵


glTranslate[fd]( TYPE x , TYPE y, TYPE z);   //创建一个平移x、y、z的矩阵,然后将活动矩阵堆栈的栈顶矩阵后乘以这个矩阵
glLoadMode( GL_MODELVIEW ); 
glLoadIdentity( );     
glTranslatef( 2.f , 0.f , 0.f ); 
glRotatef( -120.f , 0.f , 1.f ,0.f ); 

         上述代码首先选择模型视点矩阵,并将其栈顶矩阵设置为单位矩阵。接下来,它后面的两个矩阵:先沿正x轴平移,再绕y轴旋转-120°。得到模型视点矩阵堆栈的栈顶矩阵将几何体放在新原点(2.0,0.0,0.0)处,然后将其绕y轴旋转-120°。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值