gpt4 book ai didi

opengl - 使深度缓冲区只读

转载 作者:行者123 更新时间:2023-12-04 14:52:13 25 4
gpt4 key购买 nike

将深度缓冲区设为只读有什么用?我在红皮书上读到过,在这种情况下,您需要先绘制不透明的对象,然后再绘制透明的对象。我已经测试过了,并且还在两个不透明的对象上进行了测试,结果很难解释,而且我发现将其设为只读没有任何用处。有人可以解释一下吗?

最佳答案

这在某些情况下绝对有意义。这里有两个:

  • 您可能会为您的图形使用非常昂贵的像素着色器。如果这样做,您希望最小化需要着色的像素数量。为此,您可以首先将场景渲染到深度缓冲区中(禁用写入颜色缓冲区)。然后,您将深度缓冲区设置为只读,并在启用颜色写入并将深度比较模式设置为相等的情况下渲染所有几何图形。这可以确保屏幕上的每个像素都只绘制一次,并且您可以使用非常昂贵的像素着色器,同时仍然保持良好的帧速率。
  • 透明度问题:如果渲染透明(alpha 混合)三角形,绘制顺序对最终图像有显着影响。为了获得好看的结果,一种尝试过且值得信赖的方法是首先渲染所有不透明的几何体。然后禁用对深度缓冲区的写入并呈现从后到前排序的所有透明内容。这将确保您的透明多边形始终按顺序绘制,并且它们不会干扰不透明的东西。

  • 想象一下这个案例:
  • 相机在街景中,你正在看一家有 window 的商店,店内有一些不错的东西。
  • 您首先绘制透明窗口 - 启用深度写入。
  • 然后你绘制商店的内部。由于z-buffer,所有像素都将被丢弃,因为图形卡认为像素不可见。
  • 你最终会得到一个完全错误的图像:一个窗口在……嗯……在你开始渲染之前你的图形内存中的任何东西。

  • 如前所述:为了解决这个问题,您首先使用深度测试和深度写入渲染所有不透明的东西(商店内部)。然后在打开深度测试和关闭深度注销的情况下渲染窗口。这将解决这个问题。

    这是一个例子,说明这些东西有多丑。它显示了另一种处理透明度错误的方法(仔细看看地毯)。

    alt text

    关于opengl - 使深度缓冲区只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433512/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com