Need help in FPS Camera

tlc

19-02-2008 03:30:09

Been figuring :cry: what happened to my camera view - keep giving me a grey screen. Anyone can enlighten me what went wrong with the following code in createScene()?

OSMScene oScene;
oScene.initialise("../../media/scenes/houses/house.osm");
oScene.createScene();
mSceneMgr = oScene.getSceneManager();

Ogre::Root::getSingleton().getAutoCreatedWindow()->getViewport(0)->setCamera(mCamera);

OgreNewt::CollisionPrimitives::TreeCollisionSceneParser* stat_col = new OgreNewt::CollisionPrimitives::TreeCollisionSceneParser( mWorld );
stat_col->parseScene( mSceneMgr->getRootSceneNode(), true );
OgreNewt::Body* bod = new OgreNewt::Body( mWorld, stat_col );
delete stat_col;
bod->attachToNode( mSceneMgr->getRootSceneNode() );
bod->setPositionOrientation( Ogre::Vector3(0.0, 0.0, 0.0), Ogre::Quaternion::IDENTITY);

mMainNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
mCamNode = mMainNode->createChildSceneNode(Ogre::Vector3(0.0, 175.0, 0.0), Ogre::Quaternion(0.258, 0.0, 0.966, 0.0168) );
mCamNode->attachObject(mCamera);

OgreNewt::Collision* ent_col = new OgreNewt::CollisionPrimitives::Box( mWorld, PlayerSize );
Player = new OgreNewt::Body( mWorld, ent_col );
delete ent_col;

Player->setPositionOrientation( Ogre::Vector3( 0.0, 175.0, 0.0 ), Ogre::Quaternion(0.258, 0.0, 0.966, 0.0168) );
Ogre::Vector3 ent_inertia = OgreNewt::MomentOfInertia::CalcBoxSolid( PlayerWeight, PlayerSize );
Player->setMassMatrix( 100.0, ent_inertia );
Player->attachToNode( mMainNode );


In my createFrameListener()

mFrameListener = new DemoFrameListener( mWindow, mCamera, mSceneMgr, mWorld, mCamNode, Player, mEntity);
mRoot->addFrameListener(mFrameListener);


I suspect something wrong with the position and orientation :(

albino

19-02-2008 14:38:29

hmm... looks like your camera is inside the player object Ogre::Vector3(0.0, 175.0, 0.0)
and Player->setPositionOrientation( Ogre::Vector3( 0.0, 175.0, 0.0 ), Ogre::Quaternion(0.258, 0.0, 0.966, 0.0168) );

just a guess try to change the position settings

tlc

21-02-2008 00:32:35

hmm... looks like your camera is inside the player object Ogre::Vector3(0.0, 175.0, 0.0)
and Player->setPositionOrientation( Ogre::Vector3( 0.0, 175.0, 0.0 ), Ogre::Quaternion(0.258, 0.0, 0.966, 0.0168) );

just a guess try to change the position settings


I tried changing my camera position, but still same problem.
mCamNode = mMainNode->createChildSceneNode(Ogre::Vector3(0.0, 0.0, 0.0), Ogre::Quaternion(0.258, 0.0, 0.966, 0.0168) );
mCamNode->attachObject(mCamera);

mCamera->setPosition(0.0, 300.0, 0.0);
mCamera->setOrientation(Ogre::Quaternion(0.258, 0.0, 0.966, 0.0168));

OgreNewt::Collision* ent_col = new OgreNewt::CollisionPrimitives::Box( mWorld, PlayerSize );
Player = new OgreNewt::Body( mWorld, ent_col );
delete ent_col;

Player->setPositionOrientation( Ogre::Vector3( 0.0, 175.0, 0.0 ), Ogre::Quaternion(0.258, 0.0, 0.966, 0.0168) );
Ogre::Vector3 ent_inertia = OgreNewt::MomentOfInertia::CalcBoxSolid( PlayerWeight, PlayerSize );
Player->setMassMatrix( 100.0, ent_inertia );
Player->attachToNode( mMainNode );

albino

21-02-2008 12:17:47

try this:

camera pos:

camera->setPosition(0, 0, 10);

and player pos:

playerbody->setPositionOrientation( Ogre::Vector3(0.0,5.0,0.0), playernode->getOrientation() );

and set camera orientation to 0

tlc

25-02-2008 07:33:18

try this:

camera pos:

camera->setPosition(0, 0, 10);

and player pos:

playerbody->setPositionOrientation( Ogre::Vector3(0.0,5.0,0.0), playernode->getOrientation() );

and set camera orientation to 0


Thanks albino for your help!

I changed my source code as follows:

mMainNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
mCamNode = mMainNode->createChildSceneNode();
mCamNode->attachObject(mCamera);

mCamera->setPosition(0.0, 0.0, 10.0);

OgreNewt::Collision* ent_col = new OgreNewt::CollisionPrimitives::Box( mWorld, PlayerSize );
Player = new OgreNewt::Body( mWorld, ent_col );
delete ent_col;

Player->setPositionOrientation( Ogre::Vector3( 0.0, 5.0, 0.0 ), mMainNode->getOrientation() );

Ogre::Vector3 ent_inertia = OgreNewt::MomentOfInertia::CalcBoxSolid( PlayerWeight, PlayerSize );
Player->setMassMatrix( 100.0, ent_inertia );
Player->attachToNode( mMainNode );


Still the same - GREY screen :cry: Did I change correctlyl??

albino

26-02-2008 06:58:17

hmm.. weird works for me, try set

camera->lookat(Vector3(0,5,0));

my camera setup is like this:

camera = sceneMgr->createCamera("camera");
Ogre::Viewport* vp = window->addViewport(camera);
vp->setBackgroundColour(ColourValue(0.47f, 0.67f, 0.96f)); //Blue sky background color
camera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
camera->setNearClipDistance(0.2f);
camera->setFarClipDistance(2000.0f);
camera->setFOVy(Ogre::Degree(60));
camera->setPosition(0, 0, 10);
camera->lookAt(Ogre::Vector3(0,5,0));

tlc

26-02-2008 08:29:16

hmm.. weird works for me, try set

camera->lookat(Vector3(0,5,0));

my camera setup is like this:

camera = sceneMgr->createCamera("camera");
Ogre::Viewport* vp = window->addViewport(camera);
vp->setBackgroundColour(ColourValue(0.47f, 0.67f, 0.96f)); //Blue sky background color
camera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
camera->setNearClipDistance(0.2f);
camera->setFarClipDistance(2000.0f);
camera->setFOVy(Ogre::Degree(60));
camera->setPosition(0, 0, 10);
camera->lookAt(Ogre::Vector3(0,5,0));


Oh.. so careless am I !!! :oops: I didn't call createCamera() function in the SceneManager.

albino

27-02-2008 07:15:50

:) so it works now?

tlc

28-02-2008 00:01:11

:) so it works now?

Yes! :D

Thank you so much for your help!!