6-1.向量
2020-09-30 本文已影响0人
Pufus
对于学习OpenGL 有⼀个误区,就是⼤家认为如果不能精通那些3D图形数学知识,会让我们寸步难⾏,其实不然。就像我们不需要懂得任何关于汽车结构和内燃机方面的知识也能每天开车。但是,我们最好能对汽车有⾜够的了解,以便我们意识到什么时候需要更换机油、定期加油、汽⻋常规保养工作。
向量
在 3D 笛卡尔坐标系,基本上⼀个顶点就是XYZ 坐标空间上的⼀个位置,⽽在空间中给定的⼀个位置恰恰是由⼀个单独的 XYZ 定义的,⽽这样的 XYZ 就是向量。
XYZ.png
在 X轴上的向量 (1,0,0),向量⻓度为1. 我们称为⻓度为1的向量为
向量长度计算公式.png
如果一个向量不是单位向量, ⽽我们把它缩放到1. 这个过程叫做
向量点乘.png
如何单位化向量?
计算公式: (x/|xyz|, y/|xyz|, z/|xyz|);
使⽤⼀个⾮零向量除以它的模(向量的⻓度), 就可以得到⽅向相同的单位向量;
math3d 库中提供了关于点乘的API
//1.m3dDotProduct3 函数获得2个向量之间的点乘结果;----- 即余弦值 = cosα
float m3dDotProduct3(const M3DVector3f u,const M3DVector3f v);
//2.m3dGetAngleBetweenVector3 即可获取2个向量之间夹⻆的弧度值;------ 即α = arccos(余弦值)
float m3dGetAngleBetweenVector3(const M3DVector3f u,const
M3DVector3f v);
向量的叉乘
向量之间的
向量叉乘.png
math3d 库中提供了关于叉乘的API
//1.m3dCrossProduct3 函数获得2个向量之间的叉乘结果得到⼀个新的向量
void m3dCrossProduct3(M3DVector3f result,const M3DVector3f u ,const M3DVector3f v);