要理解为什么渲染质量上会不致最重要是要理解屏幕Z坐标特性Z值指定了从片断到眼睛距离在正交投影中距离和Z值关系是线性但在透视投影中却不是在透视投影中这种关系是非线性而且非线性程度和Frustum中far/near(或gluPerspective中zFar/zNear)成比例这种非线性在靠近近截面时增加了Z值精度而且增加了深度缓存Cache效率;但是在视见体其它部分则降低了精度也就减少了深度缓存Cache精确性根据经验far/near比值大于1000会有这种不好效果所以般far/near比值应小于1000要想解决这个问题最简单思路方法是通过将近截面远离眼睛来降低far/near比值其唯副作用是离眼睛很近物体可能会被裁减掉但在特定应用中这很少是个问题近截面位置对X、Y坐标投影没有影响因此这对图像影响很小
还有OpenGL光栅化和深度缓存Cache些其他方面值得提个大问题是光栅化过程使用不精确算法所以很难处理共面图元除非它们共享相同平面方程这个问题在有限精度深度缓存Cache实现中更加严重这些问题包括:贴花(decaling)、隐藏线消除、轮廓多边形和阴影等不过现在已经提出许多思路方法来解决这些问题如PolygonOff技术等
深度缓存Cache位数是衡量深度缓存Cache精度参数深度缓存Cache位数越高则精确度越高目前显卡般都可支持16位ZBuffer些高级显卡已经可以支持32位ZBuffer但般用24位ZBuffer就已经足够了
最新评论