|
楼主 |
发表于 2016-5-30 08:59:14
|
显示全部楼层
谢谢大侠关注。
融合带两边各用一个独立的相机,旋转相机矩阵,对称透视投影。
这是设置透视投影的地方:
double aspectRatio = _screenWidth / (float)_screenHeight;
double fovy = atan(tan(osg:egreesToRadians(_cameraFov) * 0.5) / aspectRatio) * 2.0;
camera->setProjectionMatrixAsPerspective(osg::RadiansToDegrees(fovy), aspectRatio, 1.0, 100000);
在相机操作器中计算相机的矩阵:
osg:uat childRot = osg::Quat((delRot.x()), osg::Vec3d(1.0, 0.0, 0.0),
(delRot.y()), osg::Vec3d(0.0, 1.0, 0.0),
(delRot.z()), osg::Vec3d(0.0, 0.0, 1.0));
osg::Matrixd mat = osg::Matrixd::rotate(chanlRadians, osg::Vec3d(0.0f,0.0f,1.0f)) * osg::Matrixd::rotate(childRot) * osg::Matrixd::rotate(parentRot);
mat = mat * osg::Matrixd::translate( delPos );
_matrix = osg::Matrixd::rotate(osg:I_2,osg::Vec3d(1,0,0)) * mat;
其中 chanlRadians是当前的通道旋转角度 childRot是当前视点的旋转 parentRot是船体的旋转 delPos是船体的世界坐标
以上数据打印在屏幕上是一样的。
麻烦您帮看看,纠结啊!!! |
|