OpenGL 之3D数学
在开发过程我们涉及到的图形变换,就会涉及到矩阵/向量的计算.例如大家在使用 CAnimation 实现仿射变换,就使用了了OpenGL渲染技术.
math3D中有2个数据类型能够表示一个3维或者4维向量
在典型情况下,w坐标设为1.0。x,y,z值通过除以w,来进⾏行行缩放。而除以1.0则本质上不改 变x,y,z值。
2个单元向量 之间进⾏点乘运算将得到一个标量(不是三维向量量,是一个标量量).它表示两个向量之间的夹角的余弦值[-1,1];
如果向量不是单位向量,我们可以通过单位化向量。
单位向量1(x1,y1,z1)点乘单位向量2(x2,y2,z2)等于x1 x2+y1 y2+z1*z2
结果是u和v都是单位向量,得到是u和v夹角的余弦值.
结果是U和V的夹角。
两个向量叉乘就可以得到另外一个向量,新的向量会与原来2个向量定义的平面垂直。(叉乘不要求两个向量为单位向量)
新的向量与原来两个向量垂直,我们可以得到两个方向的新向量,显然得到两个向量是不对的,在这里要用右手法则判断
result为u叉乘v的结果
两种定义方式只是精度不同,都为三维矩阵
精度不同的四维矩阵
将⼀个 向量乘以单元矩阵 ,就相当于一个向量乘以1. 不会发生任何改变。
变换顶点向量量 = M_pro * M_view * M_model * V_local
变换顶点向量量 = 投影矩阵 ✖ 视图变换矩阵 ✖ 模型矩阵 ✖ 顶点
A 到Aᵀ就是从行矩阵转化成列矩阵的过程,这个过程叫矩阵的转置
所以在openGL中运用的是列矩阵。
顶点着色器中的运用
模型变换: ⽤于操纵模型与其中某特定变换. 这些变换将对象移动到需要的位置. 通过旋转,缩放,平移.
m:设置平移后的矩阵
X:X轴方向上平移的距离
Y:Y轴方向上平移的距离
Z:Z轴方向上平移的距离
m:设置旋转后的矩阵
angle:设置旋转的角度
X:如果为1,沿X轴旋转 ,如果为0,X轴不旋转
Y:如果为1,沿Y轴旋转,如果为0,Y轴不旋转
Z:如果为1,沿Z轴旋转, 如果为0,Z轴不旋转
m:设置旋转后的矩阵
xScale:x轴的坐标缩放xScale,如果为-1,x轴翻转
yScale:y轴的坐标缩放yScale,如果为-1,y轴翻转
Z xScale:z轴的坐标缩放zScale,如果为-1,z轴翻转
product:两种模型变化后的结果
a:先按照a矩阵变化
b:后按照b矩阵变化.
** 其实我们经过打断点再手动计算可知,是bxa,,为什么呢?原因是OpenGL默认是列矩阵,我们手动设置的值还是按照数学规律设置的,因为转置,所以相等**