3D图形数学速成课
2014-09-02 14:49
204 查看
------------- 向量
在使用向量来操纵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(以列为主的)矩阵排序的矩阵约定。
在使用向量来操纵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(以列为主的)矩阵排序的矩阵约定。
相关文章推荐
- 3D图形数学速成课(NOTE)
- 3D图形数学速成课(NOTE)3
- 3D图形数学速成课(NOTE)2
- 3D数学之-图形渲染数学
- 3D图形数学(1)
- 3D数学基础:图形与游戏开发(第6章3D向量类)笔记
- 3D 图形编程的数学基础(3) 矩阵基本变换
- 3D数学基础图形与游戏开发之坐标系
- 3D图形数学(2)
- 3D数学基础,图形与游戏开发笔记1
- 3D Math Primer for Graphics and Game Development -- 图形与游戏开发(3D数学基础) (简介)
- 3D图形数学(4)
- 3D 图形编程的数学基础(1) 向量及其运算
- 3D图形数学(3)
- 3D图形数学(6)
- 3D数学基础:图形与游戏开发_读书笔记
- 数学图形(2.20)3D曲线
- 3D图形数学(5)
- 3D数学基础 图形与游戏开发的学习 (六)[多坐标系]
- 数学图形(2.19) 利萨茹3D曲线