|
楼主 |
发表于 2011-7-27 17:53:32
|
显示全部楼层
我想你还是没有正确理解,如果两个相机投影矩阵相同,所谓的near投影面大小不同是不成立的。 楼上 ...
indif 发表于 2011-7-25 10:03
投影矩阵相同,那么left,right,near,far都相同。我帖子里面好像没有讲投影矩阵相同,近裁减面不同。
我的意思是给不同的相机设置相同的投影矩阵参数,结果运行过程中打印出来的实际参数不一样。代码比如:
- osg::Matrixd viewOffset;
- viewOffset=osg::Matrix::translate(osg::Vec3(0.0,0.0,-42));
- osgViewer::View* view = new osgViewer::View;
- osg::Camera* camera=createCamera(x,y,w,h);
- //设置观察矩阵方向
- osg::Matrix mv=view->getCamera()->getViewMatrix();
- camera->setViewMatrix(mv*viewOffset);
- //设置投影矩阵
- camera->setProjectionMatrixAsFrustum(left,right,bottom,top,zNear,zFar);
- view->setCamera(camera);
复制代码
其中
left=-0.7
right=0.7
bottom=-0.685
top=0.08795
near=0.83623
far=10000
而实际上通过如下代码打印出的视锥体参数:
- double fovy,aspectRatio,zNear,zFar;
- std::cout<<"viewMater:"<<std::endl;
- cViewer->getView(0)->getCamera()->getProjectionMatrixAsPerspective(fovy,aspectRatio,zNear,zFar);
- std::cout<<"fovy:"<<fovy<<";aspectRatio:"<<aspectRatio<<";zNear:"<<zNear<<";zFar:"<<zFar<<std::endl;
复制代码
打印结果是fovy=45.32,aspectRatio=1.81,zNear=0.121,zFar=246.84。
可能我对OSG中master相机和slave相机之间的关系理解的不是特别清楚。
对不同的相机设置相同的near,实际二者不同,如有可能,您能解释下为什么? |
|