void ScreenBase::computeDefaultViewProj(osg::Vec3d eyePos, osg::Matrix & view, osg::Matrix & proj) { //translate screen to origin osg::Matrix screenTrans; screenTrans.makeTranslate(-_myInfo->xyz); //rotate screen to xz osg::Matrix screenRot; screenRot.makeRotate(-_myInfo->h * M_PI / 180.0,osg::Vec3(0,0,1), -_myInfo->p * M_PI / 180.0,osg::Vec3(1,0,0), -_myInfo->r * M_PI / 180.0,osg::Vec3(0,1,0)); eyePos = eyePos * screenTrans * screenRot; //make frustum float top, bottom, left, right; float screenDist = -eyePos.y(); top = _near * (_myInfo->height / 2.0 - eyePos.z()) / screenDist; bottom = _near * (-_myInfo->height / 2.0 - eyePos.z()) / screenDist; right = _near * (_myInfo->width / 2.0 - eyePos.x()) / screenDist; left = _near * (-_myInfo->width / 2.0 - eyePos.x()) / screenDist; proj.makeFrustum(left,right,bottom,top,_near,_far); // move camera to origin osg::Matrix cameraTrans; cameraTrans.makeTranslate(-eyePos); //make view view = screenTrans * screenRot * cameraTrans * osg::Matrix::lookAt(osg::Vec3(0,0,0),osg::Vec3(0,1,0), osg::Vec3(0,0,1)); }