OSG学习笔记18 - 关于物体绕指定点旋转的问题(非坐标轴原点)
2017-03-14 21:15
453 查看
两种解决方案:
1、使用PAT节点,即PositionAttitudeTransform节点类中的,setPivotPoint(const Vec3d&)来设置旋转轴心或缩放轴心。这个是查到的方法,但实践没有成功,在调用这个setPivotPoint()方法时,模型总会发生位移,没有找出原因。
这里贴出一下osg forum里的相关内容,希望能有所帮助。
http://forum.openscenegraph.org/viewtopic.php?t=3721&view=previous
可以参考example中的osgLight,osgLaucher,osgLogo。
2、可行方案
其实和之前写的OSG学习笔记17-正确设置物体的缩放矩阵中的内容原理是一样的。
如果需要以场景中的某一点而非原点为轴心,进行旋转或缩放变换,则应先平移当前坐标轴原点(也可以理解为平移这个物体)到指定的轴心点,再进行SRT矩阵变换,再平移回来。——摘自王锐大大的书。
picked->setMatrix(originPos*osg::Matrix::translate(-set_center)
*osg::Matrix::rotate(rotateParameter)*osg::Matrix::translate(set_center));这里的set_center就是想要指定的平移的点。originPos是物体表面顶点矩阵。
1、使用PAT节点,即PositionAttitudeTransform节点类中的,setPivotPoint(const Vec3d&)来设置旋转轴心或缩放轴心。这个是查到的方法,但实践没有成功,在调用这个setPivotPoint()方法时,模型总会发生位移,没有找出原因。
这里贴出一下osg forum里的相关内容,希望能有所帮助。
http://forum.openscenegraph.org/viewtopic.php?t=3721&view=previous
osg::Node* createRoom(osg::Node* loadedModel) // From osgLight example { // default scale for this model. osg::BoundingSphere bs(osg::Vec3(0.0f,0.0f,0.0f),1.0f); osg::Group* root = new osg::Group; if (loadedModel) { const osg::BoundingSphere& loaded_bs = loadedModel->getBound(); osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform(); pat->setPivotPoint(loaded_bs.center());
可以参考example中的osgLight,osgLaucher,osgLogo。
2、可行方案
其实和之前写的OSG学习笔记17-正确设置物体的缩放矩阵中的内容原理是一样的。
如果需要以场景中的某一点而非原点为轴心,进行旋转或缩放变换,则应先平移当前坐标轴原点(也可以理解为平移这个物体)到指定的轴心点,再进行SRT矩阵变换,再平移回来。——摘自王锐大大的书。
picked->setMatrix(originPos*osg::Matrix::translate(-set_center)
*osg::Matrix::rotate(rotateParameter)*osg::Matrix::translate(set_center));这里的set_center就是想要指定的平移的点。originPos是物体表面顶点矩阵。
相关文章推荐
- OSG学习笔记16 - 对点选物体平移(鼠标点选物体)(物体随鼠标移动)(屏幕坐标转世界坐标)
- java学习笔记,试用初学者,第二节,关于内存地址分配问题
- 关于SQLServer2005的学习笔记——统计学自动分组问题
- 关于SQLServer2005的学习笔记——树形结构问题
- [Silverlight学习笔记]关于页面刷新的问题
- 【学习笔记】一个关于在时间轴上编程的问题
- 关于GPS坐标转换的学习笔记---相当头疼
- Flash/Flex学习笔记(42):坐标旋转
- 【jQuery学习笔记】关于jQuery1.6.1版的ajaxstart不执行问题解决方案
- 个人学习笔记8之--关于OVER子句 多属性的比较 PIVOT 聚合问题
- android菜鸟学习笔记.关于虚拟机里面的ubuntu 文件夹共享给windows XP的拷贝不出来的问题
- 关于SQLServer2005的学习笔记——多触发器执行问题
- 关于SQLServer2005的学习笔记——生日问题
- 18、深入浅出MFC学习笔记,关于C++
- 关于asp.net 2.0 入门学习之“GlobalResources与Callback问题”的笔记
- 关于SQLServer2005的学习笔记——多触发器执行问题
- JavaWeb技术学习笔记(2)-关于tomcat的几个问题
- 关于SQLServer2005的学习笔记——统计学自动分组问题
- WPF学习笔记 - ”指定的元素已经是另一个元素的逻辑子元素。请先将其断开连接。“问题的解决方法之一
- 关于OSG中matrixTransfrom类旋转问题理解