|
原帖地址:
http://forum.openscenegraph.org/viewtopic.php?t=2053
改动之处在MFC_OSG.cpp文件InitCameraConfig函数mViewer->realize()之后加入如下的代码手动更改比例:
double fovy,aspectRatio,z1,z2;
mViewer->getCamera()->getProjectionMatrixAsPerspective(fovy,aspectRatio,z1,z2);
aspectRatio=double(traits->width)/double(traits->height);
mViewer->getCamera()->setProjectionMatrixAsPerspective(fovy,aspectRatio,z1,z2);
这样就透视投影工作正常了。
仍然是这个文件和这个函数位置,在mViewer->realize()之后我加入如下的代码将其更改为正交投影:
double w = ( double )traits->width / ( 2 * 50 );
double h = ( double )traits->height / ( 2 * 50 );
mViewer->getCamera()->setProjectionMatrixAsOrtho2D( -w, w, -h, h );
后面的50相当于一个缩放参数。我想达到这样一个目的:屏幕上绘制东西的尺寸不随窗口的尺寸改动而变化。
于是我为CMFC_OSG_MDIView类添加了OnSize函数,并写了如下代码:
void CMFC_OSG_MDIView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// 偷懒添加了一个公共变量
if( !mOSG->bOK )
return;
mOSG->getViewer()->getCamera()->setViewport( 0, 0, cx, cy );
double w = ( double )cx / ( 2 * 50 );
double h = ( double )cy / ( 2 * 50 );
mOSG->getViewer()->getCamera()->setProjectionMatrixAsOrtho2D( -w, w, -h, h );
}
运行,但是当我改变窗口尺寸的时候,比例又开始变的离谱了,无论那句注释掉的setViewport用不用都一样,似乎Viewer总要自己去处理高度,在透视投影也一样,窗口的高度最终决定渲染尺寸,但我不想要这样的结果。
朋友们知道这个问题该怎样解决吗,或是我漏掉了什么?谢谢大家! |
|