专业网站建设大型公司,wordpress 动态效果,网上有做衣服的网站,广州网站设计易企建站osg中将局部坐标系下的点坐标换算成全局坐标系下点的坐标 标签#xff1a; matrixlist2012-05-17 16:27 2940人阅读 评论(1) 收藏 举报分类#xff1a;osg#xff08;7#xff09; 坐标变换版权声明#xff1a;本文为博主原创文章#xff0c;未经博主允许不得转载。 今天… osg中将局部坐标系下的点坐标换算成全局坐标系下点的坐标 标签 matrixlist 2012-05-17 16:27 2940人阅读 评论(1) 收藏 举报 分类 osg7 坐标变换 版权声明本文为博主原创文章未经博主允许不得转载。 今天下午我遇到了这个问题原来都准备去写 nodevisitor 了后来发现 Transform.cpp 中已定义了 TransformVisitor 可直接实现 tranform 的连乘然后查看 Transform 的成员函数发现这个 TransformVisitor 是通过 Transform 的成员函数 computeLocalToWorld(...) 传入相关参数后直接就可计算出变换矩阵visitor都不用考虑了。^_^ 正在高兴时我想了想这样还是得确定这个对象是 Transform 类型的才可以于是我看了看 osg::Node 的类说明想找到 parentList 这时我发现了 osg::Node 竟然有成员函数 getWorldMatrices() 返回 MatrixList 。 当前 node 至场景根结点可能有很多条路径每个路径都会显示一次这个结点这个 list 便保存了每个路径合成的最终 matrix 。简直太方便了^-^ 现在总结下共有两个方法可获得结点的变换矩阵集合 1. osg::Transform::computeLocalToWorld(...) 2. osg::Node::getWorldMatrices() 当然针对这个问题第二个方法更方便。 一. 空间变换节点 空间变换中最重要的是坐标系和矩阵运算了。OSG坐标系中使用右手系Z轴垂直向上X轴水平向右Y轴垂直屏幕向里与OpenGL和DirectX都不同。 相关缩放、旋转和平移主要由osg::Matrix, osg::Vec3, osg::Quat几个类来完成。 局部坐标系向世界坐标系转换规则是设在局部坐标系下顶点 V 转换成世界坐标系坐标 V V V * Mn* Mn-1*……* M3* M2* M1* M0 其中M0到Mn一次为各个矩阵变换。从世界坐标系坐标下顶点 V 转换成局部坐标系 V V V * M0-1 * M1-1 * M2-1 * M3-1 *……* Mn-1-1 * Mn-1 对于空间变换而言无论是OpenGLDirectX还是OSG一般都会遵守SRT(Scale/Rotate/Translate)的运算顺序来完成符合矩阵的构建 其公式为 M Ms * Mr * Mt 顶