0
$\begingroup$

Gazebo Answers logo

Can I access Ogre::SceneManager through cameraplugin?

I do know I can draw some MovableObject in system plugin.

mSceneMgr=rendering::get_scene()->GetVisual(0)->GetSceneNode()->getCreator();
rootSceneNode=mSceneMgr->getRootSceneNode();
rootSceneNode->createChildSceneNode("trajectory_visual_line")->attachObject(line_object);

So , I think if I got sceneManager,I could attach any MovableObject to rootSceneNode. In Camera plugin, I can get sceneManager by these code

ogre_camera = camera_sensor->GetCamera()->GetOgreCamera();
scene_mgr = ogre_camera->getSceneManager();
rootSceneNode=scene_mgr->getRootSceneNode();
rootSceneNode->createChildSceneNode("trajectory_visual_line")->attachObject(line_object);

But , it turned out nothing happened. Why?

any advice is useful for newbie, Thank you :)

UPDATE:

I have tried VisualPlugin,CameraPlugin,SystemPlugin,ModelPlugin,WorldPlugin.

I tried to get RenderEngine by the following code

cout<<rendering::RenderEngine::GetInstance().GetScene()->GetName()<<endl;
cout<<rendering::RenderEngine::GetInstance().GetSceneCount()<<endl;

And ,all the Plugins mentioned above did print:

default
1

So, I thought that I got RenderingEngine successfully. Next,I wanted to attach a ninja mesh to rootSceneNode in order to check if I can access OGRE.

Ogre::ResourceGroupManager *resource_group_mgr = Ogre::ResourceGroupManager::getSingletonPtr();
resource_group_mgr->addResourceLocation("/usr/local/ogre/ogre-1.9.0/share/OGRE/Media/models","FileSystem",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,false );
resource_group_mgr->initialiseResourceGroup(Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
////////check resource list////////////////////////////////////////////////////
Ogre::FileInfoListPtr fileinfoiter= Ogre::ResourceGroupManager::getSingleton().listResourceFileInfo(Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME) ;
for(unsigned int i=0;i<(*fileinfoiter).size();i++)
   cout<<(*fileinfoiter)[i].filename<<endl;

until this step ,every thing went well. When I added these two line:

ent=mSceneMgr->createEntity("ninja.mesh");
rootSceneNode->createChildSceneNode("ninja")->attachObject(ent);

It turned out that ONLY SystemPlugin can successfully show a ninja mesh,and except for SystemPlugin ,other Plugins just shut down whithout any error masseage

What am I doing wrong? What steps did I miss? Or would it be possible that GAZEBO was designed to access OGRE from SystemPlugin only?

Thank you


Originally posted by Zheng yo chen on Gazebo Answers with karma: 80 on 2015-07-30

Post score: 0


Original comments

Comment by AndreiHaidu on 2015-07-31:
If you didn't get any segfaults it means you have access to the scene manager. You can also take a look at a VisualPlugin if you don't want to use the cameraplugin.

$\endgroup$

1 Answer 1

0
$\begingroup$

Gazebo Answers logo

there is a alternative way to access Ogre.

I inherit a "rendering::visual" class,and override "Load()" function. In "Load()" function ,I can new a ManualObject and attach it to childSceneNode.

This really works. Now I can draw what I want instead of using SystemPlugin.


Originally posted by Zheng yo chen with karma: 80 on 2015-08-12

This answer was ACCEPTED on the original site

Post score: 0

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.