|
书中涉及到场景图形管理的几处都出现了下面的代码,有点搞不清楚:
“
//根据分辨率来确定合适的投影来保证显示的图形不变形
double fovy, aspectRatio, zNear, zFar;
viewer->getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar);
”
一、fovy。。。这四个变量没有赋初值,却作为实参调用下面的函数,是自动根据分辨率由系统赋值的么,这个过程究竟是怎样的?这么调用之后就自动把模型投影到一个对称的视椎体了?
接下来:
“
double newAspectRatio = double(traits->width) / double(traits->height);
double aspectRatioChange = newAspectRatio / aspectRatio;
if (aspectRatioChange != 1.0)
{
//设置投影矩阵
viewer->getCamera()->getProjectionMatrix() *= osg::Matrix::scale(1.0/aspectRatioChange,1.0,1.0);
}
”
二、计算了新的宽高比,如果和之前的aspectRatio不一样的话,设置投影矩阵。
那么函数osg::Matrix::scale中的各个形参又代表什么,找到函数的定义如下,什么意思,为何这样算?
“
inline Matrixd Matrixd::scale(value_type sx, value_type sy, value_type sz)
{
Matrixd m;
m.makeScale(sx,sy,sz);
return m;
}
”
PS:不知OSG有没有类似MSDN的东西可以方便查阅呢?在网上查有关投影变换的内容,也都讲的不清楚。。。
虽然可能是很初级的问题,还是冒昧问下吧。谢谢了~~ |
|