OSG-漫游

转载 2017年08月28日 22:18:52
本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html
作者写的比较好,再次收藏,希望更多的人可以看到这个文章

互联网是是一个相互分形并学习的平台,我希望我每个人可以将我们认为有价值的东西,在不损害他人利益的情况下分享给更多的人。


MatrixManipulator


场景的核心管理器是viewer,而漫游必须响应事件,比如鼠标动了,场景也在动。响应事件的类是osgGA::GUIEventHandler。我们想把响应事件的类派生一个新类出来,这个类专门用来根据响应控制viewer。这个类就是osgGA::MatrixManipulator,这个类有一些设置矩阵的公共接口,有了这些接口就可以有效的控制viewer了,根据不同的习惯,大家还会设置不同的控制方式,如同OSG自带的几个操作器,操作都不尽相同。来看一下漫游的主要流程如图6.1:



操作器必须从osgGA::MatrixManipulator派生而来。osgGA::MatrixManipulator有四个可以控制场景的重要接口:

virtual void setByMatrix(const osg::Matrixd&matrix)=0

 virtual void setByInverseMatrix(const osg::Matrixd&matrix)=0

 virtual osg::Matrixd getMatrix()const=0

 virtual osg::Matrixd getInverseMatrix()const=0

四个矩阵接口可以有效的向viewer来传递矩阵的相关信息。


碰撞检测


最简单的碰撞检测如下图所示:




TravelManipulator.dll中用到的就是如图所示的原理,黑三角形代表没有移动之的位置,控制移动的函数是ChangePosition(osg::Vec3&delta),参数意思是要移动的相对于当前点的增量,在黑三角形没有移动时该函数在计算时先假设一点newPosition为移动后的点,而后通过连接这两个点,而后通过判断与场景的模型是否有交点来判定这个移动可不可以执行,如图所示,两者之间有个大盒子,是穿不过去的,所以只有保持在原地。就算没有这个盒子,移动后的新点又与地面在某种程序上有一个交点,这证明移动是不可行的。这可以防止用户穿过地板到达地下去。


路径漫游


使用path文件的方法如下面示例

#include<osgDB/ReadFile>

#include<osgViewer/Viewer>

#include<osg/Node>

#include<osgGA/AnimationPathManipulator>

 void main()

{

osgViewer::Viewer viewer;

viewer.setSceneData(osgDB::readNodeFile("glider.osg"));

 //申请一个操作器,参数为一个path文件。
 
osg::ref_ptr<osgGA::AnimationPathManipulator>amp=new osgGA::AnimationPathManipulator("glider.path");

 //选择使用这个操作器。
 
viewer.setCameraManipulator(amp.get());

viewer.realize();

viewer.run();

}


我们可以用路径编辑器编辑path文件,或者可以控制程序中的某个物体的运动轨迹然后保存为path文件。



相关文章推荐

OSG场景漫游(二)

二、测试TravelManipulator.DLL 下面我们来建立一个只需几行代码就可以完成漫游功能的程序,具体步骤如下: 第一步:菜单文件->新建项目->WIN32/WIN32控制台应用程...

osg中漫游器的原理(一)

对osg中漫游器的解析,从中可以了解到漫游器的添加、更新、处理和自定义自己漫游器的方式

osg 自动漫游

介绍两种漫游方式,都是操作器的方式,但是都有所不同。 第一种为节点跟踪漫游器(NodeTrackerManipulator),主要是当前视点跟随这个节点的包围盒中心点,所以只要设置这个节点一个路径动...

osg for android 学习之五:场景漫游

需要实现这个,先把参考的文章列在这里 http://blog.csdn.net/tinya0913/article/details/6124167 效果很不错哦,希望在android上可以实现。 /...

OSG实现场景漫游

下面的代码将可以实现场景模型的导入,然后在里面任意行走,于此同时还实现了碰撞检测。源代码下载地址: /* * File : Travel.cpp * Description : ...

OSG场景漫游(一)

一、编写动态链接库TravelManipulator.DLL 第一步:新建->项目->WIN32/WIN32控制台应用程序,项目名称填入:TravelManipulator在应用程序设置中选DLL与空...

OSG漫游系统

  • 2015-01-06 15:53
  • 5.73MB
  • 下载

OSG虚拟校园漫游

  • 2013-09-26 14:36
  • 2.76MB
  • 下载

全景虚拟漫游实现(three.js)

全景虚拟漫游其实看到很多例子,比如地图上的全景,校园的全景,之前在朋友圈流行转发的公司全景。但真的想起来要去研究或者实现一下,是前几日说工作上可能会有这样的一个需求。觉悟来得太晚,好奇心也不够重,这么...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)