Opengl_9_复合变换-创新互联

1,
多数情况下,你会想缩放物体来和3d世界相适应,旋转物体到合适的方向,移动物体到某个地方等等。到现在我们已经实践了每一次的单一图形变换。为了实现上面一系列的变换,我们需要对顶点位置左乘第一个变换矩阵,然后得到的结果再左乘下一个变换矩阵等等,将所有变换矩阵都左乘顶点位置之后实现多个变换。
在shader中应用每一个变换矩阵实现所有的变换,但这样很低效,因为对于所有顶点这些矩阵都是一样的,只有顶点的位置发生变化,这样要不断重复对每个顶点位置进行这一系列的矩阵相乘操作。
∵ Mn * Mn-1 * ... * M0 * V = (Mn* Mn-1 * ... * M0) * V
令N = Mn * Mn-1 * ... * M0

∴ Mn * Mn-1 * ... * M0 * V = (Mn * Mn-1 * ... * M0) * V = N * V
∴我们可以一次性计算N,然后把它作为一致变量传给shader和每一个顶点位置相乘完成所有的变换,这个只需要GPU对每个顶点进行一次矩阵/向量相乘操作。

2,
当计算N的时候怎样安排每个变换矩阵的先后顺序呢?首先要记住向量最开始先是被最右边的矩阵左乘的M0 M1 M2 …

先旋转后平移:


平移后旋转:

将物体远离坐标原点后,再旋转物体会同时造成物体的平移效果(是绕原点旋转,而不是绕自身旋转了)。
这是我们希望能避免的。通过先旋转后移动可以避免这两个操作的相互依赖性,这也是尽量围绕原点对称建模的原因,那样当你缩放或者旋转物体不会产生副作用,缩放和旋转后物体依然保持和之前一样对称。

3,












成都创新互联是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括做网站、成都网站建设、电商网站制作开发、小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!
名称栏目:Opengl_9_复合变换-创新互联
分享路径:http://myzitong.com/article/igocc.html