一、向量
- 向量是指在3D笛卡尔空间坐标系中,坐标系中的一个的一个顶点位置,这个顶点拥有X、Y、Z坐标值。
-
单位向量:长度为1的向量
向量长度计算(向量的模)
- OpenGL定义的向量库——math3d
math3d有两个数据类型:
M3DVector3f:三维向量(x, y, z)
M3DVector4f:思维向量(x, y, z, w),其中典型情况下,w的坐标为1.0,x,y,z值通过除以 w 来进行缩放,而x,y,z的值本质上也不会改变。 - 向量点乘(dot product)
向量可以进行加减计算,而其中点乘在开发中应用非常多。
若两个三维的单位向量进行点乘将得到一个标量,它表示这两个向量的夹角值,值的范围为[-1, 1],其实为夹角的cos值(余弦值)
假设有a、b向量点乘
math3d 库中点乘API
// m3dDotProduct3 函数获得2个向量之间的点乘结果
float m3dDotProduct3(const M3DVector3f u , const M3dVector3f v);
// 2. m3dGetAngleBetweenVector3 即可获取2个向量之间的夹角弧度值
float m3dGetAngleBetweenVector3(const M3DVector3f u ,const M3DVector3f v);
- 向量叉乘
A、B两个向量叉乘之后会得到一个新向量,新向量与A、B两个向量定义的平面垂直。(叉乘向量不必为单位向量)
// m3dCrossProduct3 函数获得2个向量叉乘,最终得到一个新向量
void m3dCrossProduct3(M3DVector3f result,const M3DVector3f u,const M3DVector3f v);
矩阵
OpenGL约定中,默认以列矩阵作为对矩阵的描述,且以一维数组作为对矩阵的存储,其他编程中多以二维对矩阵的存储形式。
以列矩阵为例,一个矩阵和一个向量相乘时,必须要求矩阵的行数与向量的列数相同,才能进行相乘计算。
模型 | 说明 |
---|---|
视图变换 | 指定观察者位置 |
模型变换 | 在场景中移动物体 |
模型视图 | 描述视图/模型变换的二元性(2种看到模型转换的方式) |
投影 | 改变视景体大小和设置它的投影方式 |
视口 | 伪变化,对窗口上最终输出进行缩放 |
- 视图变换:在做任何变换之前,必须先应用视图变换;否则其他变换在前,但视图变换发生后,会改变之前的其他变换的坐标
模型变换
模型变换:用于操纵模型与其中某特定变换,这种变换将对象移动到需要的位置,通过旋转、缩放、平移。两种看待模型变换的方式: ①移动观察者 ② 移动坐标系
- 平移: 将图像沿着给定轴进行移动
void m3dTranslationMatrix44(M3DMatrix44f m, float x, float y, float z);
- 旋转:将图像围绕某一坐标轴进行旋转
// m3dEGtOrAD(45.0) : 度数转弧度
m3dRotaionMatrix44(m3dEGtOrAD(45.0),float x,float y float z)
- 缩放:将图像的大小进行指定数量的放大or缩小
void m3dScaleMatrix44(M3DMatrix44f m, float xScale, float yScale, float zScale);
网友评论