这是一个关于投影变换的问题,
经过model-view变换后,场景中的物体放置了希望的位置上,就需要投影变换来将三维物体投影到二维屏幕上。
投影变换的目的就是定义一个视景体,使视景体之外的部分被裁剪掉,最终进入图像的只是视景体内的有关部分。关于投影变换的其他内容就不介绍了。
这里来讲讲为什么getProjectionMatrixAsPerspective(fovy,aspectRatio,zNear,zFar);是一个trick。
有个事实,通常我都没有去设置过视景体的参数,也没有思考过为什么,我只是把相机和模型放到正确的位置,执行了基本的model-view变换。实际上,这一操作由OSG代我们完成了。
以下内容来源osg forum,但我在看了三维渲染引擎设计与实践书上的第七章后觉得论坛上的一些内容是有一定问题的。(当然也可能是我没有翻译好哈哈,,不管)但也具有一定的参考价值(请继续往下阅读)。先看看论坛上的歪果仁他们怎么说。
OSG在Cull traversal(裁剪遍历?)过程中会自动计算near/far的值,大概是根据物体的位置、包围球、以及相机的位置up方向之类的来计算。从而得到一个正确的视景体,得到正确的结果。所以通常我们不用手动设置。那我想通过