查看: 1422|回复: 2

望大侠能帮忙解决一下相机设置的问题,谢谢!

[复制链接]

该用户从未签到

发表于 2013-2-5 20:04:34 | 显示全部楼层 |阅读模式
最近正编一个程序,希望程序初始时,能将相机固定在一个初始的位置。但是在使用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这个函数一样,实现裁剪呢?
望各位大侠能在百忙之余提携一下小弟!非常感谢
401_400.jpg
399_400.jpg
100_400.jpg
10_40.jpg

该用户从未签到

发表于 2013-2-6 09:09:03 | 显示全部楼层
试一下关闭相机自动计算near/far
viewer.getCamera()->setComputeNearFarMode(osgUtil::CullVisitor:: DO_NOT_COMPUTE_NEAR_FAR);

论坛里有好多类似的问题,这是OSG默认情况下会自动重新计算near/far的机制,来保证不会因为用户自定义的near/far太大或者太小而引起的z-fighting现象。

论坛里有一篇帖子你看看:http://bbs.osgchina.org/forum.ph ... MatrixAsPerspective

该用户从未签到

 楼主| 发表于 2013-2-6 09:19:13 | 显示全部楼层
wanggang8826 发表于 2013-2-6 09:09
试一下关闭相机自动计算near/far
viewer.getCamera()->setComputeNearFarMode(osgUtil::CullVisitor:: DO_ ...

谢谢,非常的感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表