将深度缓冲区设为只读的用途是什么?我在红皮书上看到,你需要首先绘制不透明的对象,然后是透明的对象.我已经测试了它,并且还测试了两个不透明的物体,结果很难解释,我发现没有任何关于使其成为只读的有用信息.有人可以解释一下吗?
在某些情况下这绝对有意义.这是两个:
您可以为图形使用非常昂贵的像素着色器.如果这样做,您希望最小化需要着色的像素数量.为此,您可以先将场景渲染到深度缓冲区(禁用对颜色缓冲区的写入).然后将深度缓冲区设置为只读,并在启用了颜色写入并将depth-compare-mode设置为相等的情况下渲染所有几何体.这可以确保屏幕上的每个像素都被绘制一次,并且您可以使用非常昂贵的像素着色器,同时仍然保持良好的帧速率.
透明度问题:如果渲染透明(alpha混合)三角形,绘图顺序会对最终图像产生显着影响.为了获得好看的结果,一种经过尝试和信任的方法是首先渲染所有不透明的几何体.然后禁用对深度缓冲区的写入,并渲染从后到前排序的所有透明内容.这将确保您的透明多边形始终按顺序绘制,并且它们不会干扰不透明的东西.
想象一下这种情况:
相机在街景中,你正在看一家带窗户的商店和店内的一些好东西.
首先绘制透明窗口 - 启用深度写入.
然后你绘制商店的内部..由于z缓冲区,所有像素将被丢弃,因为图形卡认为像素不可见.
你最终会得到一个完全错误的图像:一个窗口在......之前......在开始渲染之前你的图形内存中的任何东西.
如上所述:为了解决这个问题,首先要对所有不透明的东西(商店内部)进行深度测试和深度渲染.然后使用深度测试和深度写入渲染窗口.这将解决这个问题.
这是一个丑陋的例子.它显示了另一种处理透明度错误的方法(仔细看看地毯).
归档时间: |
|
查看次数: |
1073 次 |
最近记录: |