3D图形数学速成课

-------------     向量

      在使用向量来操纵3D几何图形时,向量可能就变成了最重要的基本概念了(没有之一)。这三个值(X,Y,Z)组合起来表示两个重要的值------- 一个方向和一个数量。

      我们使用向量来表示带方向的量。例如,X轴就是向量(1,0,0)。在X方向为+1,而在Y方向和Z方向则为0。

     

      向量能够代表的第二个量就是数量。一个向量的数量就是这个向量的长度。对于我们的X轴向量(1,0,0),向量的长度就是1。我们把长度为1的向量称为单位向量(unit vector)。如果一个向量不是单位向量,而我们将它长度缩放到1,就叫做标准化(normalization)将一个向量进行标准化就是将它的长度缩放为1。在我们只想表示一个方向而不表示数量时,单位向量就非常重要了。数量也可能是非常重要的。


     typedef float M3DVector3f[3];

     typedef float M3DVector4f[4];

     声明一个三分量的向量只需如下操作。

     M3DVector3f  vVector;

     类似地,我们可以声明并初始化一个四分量向量。

     M3DVector4f  vVector = {0.0f,0.0f,1.0f,1.0f};

     声明一个三分量顶点数组,例如为了生成一个三角形:

     M3DVector3f vVerts = {-0.5f,0.0f,0.0f,

                                           0.5f,0.0f,0.0f

                                           0.0f,0.5f,0.0f};

     我们必须用四分量的向量乘以一个4X4矩阵。



---------- 点乘

       向量是可以进行加法、减法运算,也可以简单地通过加法、减法进行缩放,或者对XYZ分量单独进行缩放。点乘只能咋两个向量之间进行。

      两个(三分量)单位向量之间的点乘运算将得到一个标量(只有一个值),它表示两个向量之间的夹角。要进行这种运算,这两个向量必须为单位长度,而返回的结果将在-1.0 到 1.0 范围之内。这个数字实际上就是这两个向量之间夹角的余弦值。

      math3D(GLTools 的一个组件)库中包含一些有用的函数使用点乘操作,

      float m3dDotProduct3(const M3DVector3f  u ,const M3DVector3f v);

      更高级的函数,实际上返回这个角的弧度值

      float m3dGetAngleBetweenVectors3(const M3DVector3f u,const M3DVector3f v);



-----------  叉乘

        叉乘运算的接货返回一个新的向量,这个新向量与原来两个向量垂直。叉乘的两个向量不必为单位向量。

       math3d 库中又一个函数对两个向量进行叉乘返回运算得到的结果向量

      void m3dCrossProducts(M3DVector3f result,const M3DVector3f u,const M3DVector3f v);

     如果调换叉乘时向量的顺序,结果得到的会与原来相反的方向。


-----------矩阵

     矩阵只有一行或者一列数字可以更简单地称为向量。

     标量:就是一个普通的单独数据,用来表示大小和特定量。

    math3d 库中又两种维度的矩阵数据类型

    typedef float M3DMatrix33f[9];

    typedef float M3DMatrix44f[16];


    OpenGL约定拒绝了使用二维数组,而使用一维数组表示矩阵。原因是,OpenGL使用一种叫做Column-Major(以列为主的)矩阵排序的矩阵约定。

  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值