OpenGL合并转换

本文介绍了OpenGL中如何高效地组合多个转换矩阵,避免重复计算。通过线性代数的规则,可以预先计算出所有转换的乘积矩阵,然后在着色器中一次性应用到每个顶点。内容包括转换顺序的重要性,例如先旋转后平移,以及如何通过管道类来封装和管理这些转换。同时,展示了源代码实现,包括矩阵乘法和转换初始化的细节。

OpenGL合并转换简介

在上一课中,我们发现了一些转换,这些转换在 3D 空间中灵活地移动对象。我们还有许多要研究的(相机控制和透视投影),但正如您可能已经猜到的,我们需要结合转换。在大多数情况下,您希望缩放对象以匹配实际纵横比、旋转以获得正确的方向、移动到某处等。为了执行上述转换,我们需要将第一个转换矩阵乘以向量,然后将第二个矩阵乘以第一个操作的结果,然后将第三个矩阵乘以先前计算的结果。这将继续,直到所有矩阵乘以向量。最简单的方法就是将所有转换矩阵提供到着色器,并让它们成乘。但是,这并不有效,因为所有矩阵对于所有顶点都是相同的,只会改变位置向量。幸运的是,线性代数提供了一套规则,使我们的生活更轻松。它告诉我们,如果给出一组矩阵M0…Mn和矢量 V, 然后公平地说: Mn* Mn-1* … * M0* V = (Mn* Mn-1* … * M0) * V 所以,如果你计数: N = Mn* Mn-1* … * M0然后: Mn* Mn-1* … * M0* V = N * V

这意味着我们可以计算 N 乘法,然后将其作为单一变量发送到着色器,在其中,它将对每个顶点进行乘法。因此,GPU 将仅计算每个顶点每个向量的一个矩阵乘法。

在 N 中,矩阵应按什么顺序排列?首先要记住的是,向量乘以右侧的矩阵(在我们的例子中 - M0).然后,向量由每个矩阵从右侧到左侧转换。在 3D 图形中,对象通常首先缩放,然后旋转,然后移动,转换相机值,最后找到 2D 投影。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源代码大师

赏点狗粮吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值