|
发表于 2012-5-11 00:17:10
|
显示全部楼层
1>.确实是master.ive 那个文件。。不过,我这里也有些问题,我看不到场景里面那些建筑物。。只能看到大概轮廓。。我也不知道是啥情况
2>.OSG貌似只提供了一些比较基本的场景查看器,至于您说的漫游器之类的,这种一般都是视具体情况而定,都需要你自己写代码来控制摄像机的动作。。
然后您在给场景设置您自己编写的摄像机即可:viewer.setCameraManipulator(new CMyCamera);
如果,您不知道如何写一个摄像机操作类的话,请去看《OSG程序设计》,里面有教如何写一个自己的摄像机类。。
3>.一般给场景或者是某节点 添加 事件处理类的时候,
都会重载bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
//然后在这个方法中,您可以进行下面的操作
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
m_camera = dynamic_cast<CMyCamera*>(viewer->getCameraManipulator());//得到漫游器
//或者是像下面这样获得漫游器,就看你具体怎么写的啦,大概就这意思,也有可能有错
//osgGA::CameraManipulator* camera = dynamic_cast<osgGA::CameraManipulator*>(viewer->getCameraManipulator());
//一般无论是你自己写的漫游器类,还是OSG提供的漫游器类都会提供一些公有的方法来控制摄像机的参数,这样的话,你在这里对m_camera进行操作,就把两个类联系起来了。。。
}
其他补充:
当然,如果您场景中有很多节点的数据都需要进行实时的交互的话,
您可以给这些节点设置一个名字:node->setName("name1");
然后再给整个场景添加一个事件处理器:viewer.addEventHandler(new CMyViewerhandler);
然后您在CMyViewerhandler这个类中可以通过查找节点的名字,得到所有需要交互的节点的信息,
然后在对这些节点进行处理。。。
不知道你对这个有兴趣没,如果有的话,再call我,我在仔细说吧,我感觉不太容易说的清楚。。。
其实,最主要的是,我也是一个新手,我上面讲的很有可能有错误的地方,还望见谅。
|
|