|
最近正编一个程序,希望程序初始时,能将相机固定在一个初始的位置。但是在使用setProjectionMatrixAsPerspective ( double fovy, double aspectRatio, double zNear, double zFar)这个函数时,总是不尽如人意, 设置fovy和aspectRatio这两个参数与使用gluPerspective时,所实现的效果是一致的,但是在设置znear和zfar时,却达不到期望的裁剪效果。
以下是我建立相机的程序
osg::Camera* mycamera()
{
double aspectratio = 800.0 / 600.0;
double myznear = 100;
double myzfar = 100.1;
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setClearMask( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
camera->setReferenceFrame( osg::Transform::ABSOLUTE_RF );
camera->setProjectionMatrixAsPerspective(45.0, aspectratio, myznear, myzfar);
osg::Vec3d upDirection( 0.0,0.0,1.0 );
osg::Vec3d center(0, 0.0, 0.0);
osg::Vec3d eyePoint(60, 0, 0);
camera->setViewMatrixAsLookAt( eyePoint, center, upDirection );
return camera.release();
}
然后通过主函数调用这个函数
osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("E:\\ive\\plane1.ive");
osg::Camera* camera = mycamera();//createBirdsEye( node->getBound() );
camera->addChild( node );
osg::ref_ptr<osgViewer::Viewer>viewer = new osgViewer::Viewer();
viewer->setSceneData( camera );
viewer->run();
以下是我设置myznear和myzfar的效果图
分别为:
myznear = 10;
myzfar = 40;
myznear = 100;
myzfar = 400;
myznear = 401;
myzfar = 400;
myznear = 399;
myzfar = 400;
但是最终的效果都是几乎一样的,请问大侠们这是为什呢?到底是哪里错误了呢?为什么就不能像gluperspective这个函数一样,实现裁剪呢?
望各位大侠能在百忙之余提携一下小弟!非常感谢 |
|