模型视图矩阵

模型视图矩阵用于在OpenGL中表示坐标变换,包括平移、旋转和缩放。通过4X4矩阵进行表示,数学库如math3d提供了构建和操作这些矩阵的方法。平移矩阵通过调整坐标轴实现移动,旋转矩阵围绕指定向量进行角度旋转,缩放矩阵则按比例改变对象大小。矩阵乘法顺序影响最终变换效果,且在着色器中使用模型视图矩阵完成几何体的渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模型视图矩阵式一个4X4矩阵,他表示变换后的坐标系,我们可以用来防置对象和确定对象额方向。我们为图元的顶点将作为一个单位矩阵(也就是一个向量)的形式来使用,并乘以一个模型视图矩阵来获得一个相对于视觉坐标系的经过变换的新坐标。


---------- 矩阵构造

      OpenGL 表示矩阵采取列有限排序,所以用4X4矩阵表示为一个有16个浮点值组成的单个数组。

      前3列的前3个元素只是方向向量,它们表示空间中X轴、y轴和Z轴上的方向(在这里用向量表示一个方向)。对于大多数应用来说,这3个向量相互之间总是称90度,并且通常为单位长度(除非我还应用了缩放或裁剪)。这种情况下地数学术语叫做标准正交(向量为单位长度)或正交(向量不是单位长度)。


-----------单位矩阵

       将一个向量乘以一个单位矩阵,就相当于用这个向量乘以1,不会发生任何改变。

    OpenGL 生产单位矩阵

    GLfloat m[] = {

                          .........

                          }   

    

    math3d 的M3DMatrix44f

    M3DMatrix44f m = {

                                  ........

                                  }

 P101  有解释

   void m3dLoadIdentity44(M3DMatrix44ff m);


-------------平移

           平移矩阵仅仅是将我们的顶点沿着3个坐标轴中的一个或多个进行平移。

          math3d 库的这个函数来平移变换

         void m3dTranslationMatrix44(M3DMatrix44f  m,float x,float y,float z);


-------------旋转

            为了将一个对象沿着3个坐标轴中的一个或者任意向量进行旋转,需要找到一个旋转矩阵。math3d 库中又一个方法帮助我们

           m3dRotationMatrix44(M3DMatrix44f m,float angle,float x,float y,float z);

          在这里,我们围绕一个有x、y和z变量指定的向量进行旋转。旋转地角度沿逆时针方向安装弧度极端,有变量angle指定。在最简单的情况下,旋转只是围绕坐标系的一个坐标轴(x、y和z)进行旋转。

         我们还可以围绕任意一个有x、y和z变量指定的向量来进行旋转。要表示这个旋转轴,我们值要绘制一条丛原点到由(x、y和z)表示的点的线段就可以了。


         M3DMatrix44f m;

        m3dRotationMatrix(m3dDegToRad(45.),1.0f,1.0f,1.0f);  创建一个旋转矩阵,可以使顶点沿着有(1,1,1)指定的旋转轴旋转45度。

       m3dDegToRad这个宏将角度值转换为弧度值,因为和计算机不同,大多数程序员比较习惯以角度进行思考。使用这个宏代替内联函数的一个好处是,如果这个值是硬编码的文字,转换将发生在编译时,这样角度和弧度之间的转换就不会产生运行时损失。



----------缩放

           math3d 库

          M3DMatrix44f m;

          void m3dScaleMatrix44(M3DMatrix44f m ,float xScale,float yScale,float zScale);



-----------综合变换

          “连接”concatenate 来表示两种变换以这种方式结合。不过在矩阵乘法中又一个小陷进需要注意,就是运算的顺序是由影响的。

         math3d 库函数m3dMatrixMultiply44 用来将两个矩阵相乘并返回运算结果。

        void  m3dMatrixMultiply44(M3DMatrix44f product, const M3DMatrix44f a ,const M3DMatrix44f b);


----------- 运用模型视图矩阵

          P104  使用平面着色器,接受4X4变换矩阵作为它的参数之一。

         m3dTranslationMatrix44 创建平移矩阵

         m3dRotationMatrix44 创建旋转矩阵

         m3dMatrixMultiiply44  矩阵相乘

         shaderManager.useStockShader(GLT_SHADER_FLAT,mFinalTranform,vRed);   使用存储着色器

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值