Hi,
I am using oceanExample, and modified the boat transform to use a
PositionAttitudeTransform instead of the MatrixTransform just because I wanted
to learn a bit more and eventually go underwater with my model and fly around
with perspective...
I was successful at orienting my boat and getting it placed at the right level
and heading, and then desired to make it move. I used the callback to update
the "y" direction in the transform, and my boat casually drifts away into the
sunset.
Code:
if(boat.valid())
{
boat->setNodeMask( scene->getOceanScene()->getNormalSceneMask() |
scene->getOceanScene()->getReflectedSceneMask() |
scene->getOceanScene()->getRefractedSceneMask() );
osg::ref_ptr<osg::PositionAttitudeTransform> boatTransform = new
osg::PositionAttitudeTransform;
//Name that NODE!
boatTransform->setName("BOAT");
boatTransform->addChild(boat.get());
const osg::BoundingSphere& bs = boat->getBound();
boatTransform->setPivotPoint(bs.center());
osg::Vec3 boatPosit(0,100,1.5);
boatTransform->setPosition( boatPosit );
boatTransform->setAttitude(osg::Quat( osg::DegreesToRadians(90.0) ,
osg::Vec3(0,0,1) ));
boatTransform->setUpdateCallback( new
BoatPositionCallback(scene->getOceanScene()) );
scene->getOceanScene()->addChild(boatTransform.get());
}
Hey... I'm no good at flying after it with my clutzy mouse skills, so I
wondered if I could get the camera to do the work for me.
Wanting to follow my boat into the sunset on it's perilous journey, I attempted
to "implement" a "FOLLOW_ME" camera mode in the SceneEventHandler. I did what
basics I could glean from whatever sources I could, and had limited success...
At least I could see water. My boat was traveling perhaps with the camera, but
I couldn't find it no matter what position and distance I placed it. I need
some clues here...
Code:
else if (_currentCameraMode == TRACKBALL)
{
osgGA::NodeTrackerManipulator* nt = new osgGA::NodeTrackerManipulator();
//Find that NODE!
osg::Node* trackedNode =
_scene->findNamedNode("BOAT",_scene->getScene());
if(!trackedNode)
return false;
nt->setNode(trackedNode);
nt->setTrackNode(trackedNode);
nt->setTrackerMode(osgGA::NodeTrackerManipulator::NODE_CENTER_AND_AZIM);
nt->setAutoComputeHomePosition(true);
nt->setMinimumDistance(100);
nt->setDistance(100);
nt->setElevation(100);
_currentCameraMode = FOLLOW_ME;
//_viewer.getCamera()->setViewMatrixAsLookAt( osg::Vec3f(0.f,0.f,20.f),
// osg::Vec3f(0.f,0.f,20.f)+osg::Vec3f(0.f,1.f,0.f),
osg::Vec3f(0,0,1) );
_viewer.setCameraManipulator(nt);
_textHUD->setCameraText("FOLLOW_ME");
}
Please note the commented out setViewMatrixAsLookAt... did not know wether it
should be used or not?
I was wondering if perhaps (again) that the nodeTrackerManipulator is
incompatible with a node which uses a PositionAttitudeTransform?
The reason I ask is that my mouse controls the position of whatever (the boat
and camera presumably) in a very radical means. The slightest touch of the
mouse causes wild swings of height, perspective or distance. Once I can find
the surface of the water.... zooooooom! What might be going on here?
Thank you!
Cheers,
tim
Code:
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=37665#37665
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org