查看: 2139|回复: 1

关于《OpenSceneGraph 3.0 Beginner's Guide》中的矩阵变换的级联

[复制链接]

该用户从未签到

发表于 2013-11-14 21:29:06 | 显示全部楼层 |阅读模式

OpenGL的坐标使用列向量,坐标变换公式为“矩阵×向量”。假设顺序进行1、2、3三个变换,如果考虑绝对坐标系,则变换矩阵为 M3×M2×M1,如果考虑相对坐标系,则变换矩阵为 M1×M2×M3。其中相对坐标系更符合人们的思维习惯。

回到OSG,因为OSG使用行向量,坐标计算公式为“向量×矩阵”,其变换矩阵是OpenGL矩阵的转置。假设顺序进行1、2、3三个变换,根据矩阵乘法公式,相对坐标系下的变换矩阵应该是 M3'×M2'×M1'。('表示转置),但是array写的两本书《OpenSceneGraph 3.0 Beginner's Guide》(P101)、《OpenSceneGraph三维渲染引擎设计与实践.pdf》(P41)中,变换矩阵均为 M1'×M2'×M3',恰好是绝对坐标系下的变换矩阵。

是我的理解有问题,还是说,书中给出的计算方法就是对应的绝对坐标系?

希望各位同仁能解惑。

该用户从未签到

 楼主| 发表于 2013-11-16 23:23:39 | 显示全部楼层
编写了一个测试程序(绘制一个圆锥,先绕X轴旋转90度,再绕Y轴旋转90度),大致弄明白了OSG中的视图模型变换:

1. 对于同一个视图模型变换,OSG矩阵是OpenGL矩阵的转置

2. 顺序进行1、2、3三个变换,如果使用绝对坐标系,变换矩阵为“矩阵1×矩阵2×矩阵3”;如果使用相对坐标系,变换矩阵为“矩阵3×矩阵2×矩阵1”

3. 多个 transform 节点级联时,使用相对坐标系。假设从根节点至叶节点经过 T1、T2 两个 transform 节点,则变换顺序为T1、T2,变换矩阵为T2×T1
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表