新版本1.8的特性
1. 加入了复合模型Model对象
模型对象直接拥有贴图,绘制数据,Shader复合而成
现在定义的模型可以直接指定贴图,数据,并且有默认的shader,同时添加了两个函数
initAppendOp:指定初始化的一些操作
drawAppendOp:在渲染过程中的一些操作
另外,Model对象直接提供了move,scale,rotate操作
Transform操作
Transform矩阵
在opengl里面,使用Transform矩阵进行变换
所谓的Transform矩阵就是一个4x4矩阵
以下资料来自:https://learnopengl.com/Getting-started/Transformations
1. Transform矩阵的初始化
当我们初始化Transform矩阵为旋转0=度,位置在(0,0,0),大小不变(1,1,1)的对象时,它就是一个eye(4)
2. 初始状态的设置
对于一个Model,肯定有一个初始状态
sacale:(1,1,1)
pos(0,0,0)
rotate(0,0,0)
3.平移操作
所谓的平移操作,就是指在shader中,将gl_Position语义设置为某个值
在顶点着色器是:逐顶点操作,因为每个顶点位置是不一样的都需要从cpu拷贝到gbuffer里面,再通过aPos获取
我们现在想要做一个平移操作很简单,对每一个aPos加上一个偏移就可以了
这一点很好理解,但是其实并不是太方便
我们希望能通过线性变换直接实现这个过程,这样我们就可以直接通过设计在cpu里面的矩阵,通过uniform将数据从cpu指示gpu进行绘制,
线性 变换的基本操作就是
y = Ax
其中A就是线性变换矩阵
那么如果A是一个4x4矩阵,那么很多事情会变得很简单
比如我们产生一个用于位移的变换矩阵
当我们进行线性变换时,让
y = Ax
满足
如果你看过linear algebra,那么很容易的,你可以知道它的结果
直接用线性变换,那么我们就能直接实现了移动的操作,如果对于一个面或者一个体的每一个顶点都进行相同的移动操作,那么显然,整个体都会发生变化
这是很nice的一点
所以我们现在得到一个共识,Translation的基本算法:
- 就是在cpu里面去构建一个变换矩阵A
- 将A通过uniform写入到对应ID的shader对象里面
- shader自动进行管线计算出新的位置
4. 旋转操作
类似的,构建一个旋转矩阵,因为旋转有绕着X轴旋转的,有绕着Y轴旋转的也有绕着Z轴旋转的,所以我们可以构建出三种类型的旋转矩阵
X轴的:
Y轴的:
Z轴的
他们和euler角(x,y,z)的变换的实例:
挺简单的,你们可以自行计算