我是靠谱客的博主 玩命小刺猬,最近开发中收集的这篇文章主要介绍osg矩阵变换相关(持续更新修改),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、对osg实体进行矩阵变换(缩放、旋转、平移)时,一般先后顺序为先缩放,再旋转,再平移。

2、若已有矩阵osg::Matrixd mat;修改其旋转角度,则需要先将实体平移到原点,再针对性旋转。

例子:设置实体绕Z轴旋转rotate弧度

    osg::Vec3d center = m_Plot->center();//获取实体中心点
    osg::Vec3d centerOld = center;
    osg::Matrixd mat = m_Old;

    mat.postMultTranslate(-centerOld);//位移到原点附近
    center.normalize();
    mat.postMult(osg::Matrixd::rotate(center, osg::Vec3d(0, 0, 1)));//调整实体姿态,使其局部坐标z轴与世界坐标z轴重合

    mat.postMult(osg::Matrixd::rotate(rotate, osg::Vec3d(0, 0, 1)));//设置绕Z轴角度
    
    mat.postMult(osg::Matrixd::rotate(osg::Vec3d(0, 0, 1), center));//还原姿态
    mat.postMultTranslate(centerOld);//还原中心点位

    m_Plot->setMatrix(mat);

最后

以上就是玩命小刺猬为你收集整理的osg矩阵变换相关(持续更新修改)的全部内容,希望文章能够帮你解决osg矩阵变换相关(持续更新修改)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部