opengl-第8章:移动,缩放,旋转

新版本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的基本算法:

  1. 就是在cpu里面去构建一个变换矩阵A
  2. 将A通过uniform写入到对应ID的shader对象里面
  3. shader自动进行管线计算出新的位置
4. 旋转操作

类似的,构建一个旋转矩阵,因为旋转有绕着X轴旋转的,有绕着Y轴旋转的也有绕着Z轴旋转的,所以我们可以构建出三种类型的旋转矩阵
X轴的:
在这里插入图片描述
Y轴的:
在这里插入图片描述
Z轴的
在这里插入图片描述
他们和euler角(x,y,z)的变换的实例:

在这里插入图片描述挺简单的,你们可以自行计算

4. 缩放变换

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值