从上一节可以看出,打印出来的图片是有背景色的,也就是摄像机位置不对。那应该放在哪里呢?
答案是:给定投影矩阵的 fov 为 90 度以捕捉整个面,且摄像机距离该面的距离是立方体边长的一半。
即、
这里我用的立方体是长度为1,中心在原点,所以,从中心到立方体的一个面长度是0.5,摄像机距离这个面应该也是0.5,那么就把漫游器放在(1,0,0)这个位置,即
osg::Vec3d newEye(1, 0, 0);
osg::Vec3 newCenter(0, 0, 0);
osg::Vec3 newUp(0, 1, 0);
manipulator->setHomePosition(newEye, newCenter, newUp);
osg::ref_ptr<osg::Camera> camera = viewer.getCamera();
viewer.getCamera()->setProjectionMatrixAsPerspective(90.0f, 1.0, 1, 1000.0);
打印出来如下:
发现高度是正确的,但是宽度还是太宽,有背景色。这时候就要考虑用其他摄像机了,比如从摄像机。