gpt4 book ai didi

OpenGL 模板缓冲区 OR 操作?

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

我不确定这是否可行,但值得一试。我正在使用模板缓冲区来减少使用此算法的延迟渲染器中光体积的过度绘制(当相机位于体积之外时):

  • 使用廉价的着色器,将深度测试设置为 LEQUAL 绘制背面,将它们标记在模板缓冲区中。
  • 使用昂贵的光照着色器,绘制正面,深度测试设置为 GEQUAL。

  • 这将导致仅对光体积内的像素进行着色。绘制多个灯时会出现这个问题。首先,由于状态更改代价高昂,因此为每个光在廉价和昂贵的着色器之间反复切换可能不是最好的主意。理想情况下,我想通过使用廉价着色器渲染 8 个光体积,然后使用昂贵着色器渲染 8 个光体积来利用模板缓冲区的所有 8 位。但是,当灯光重叠时会出现问题,因为无法分辨哪些像素属于哪些灯光。

    想到的解决方案是在每个灯的模板缓冲区中使用 1 位。因此,对于轻量 n,在廉价 channel 中标记模板缓冲区中的第 n 位,然后仅在昂贵 channel 期间渲染具有该位的像素。

    我以前没有使用过模板缓冲区,但从我读到的内容来看,这似乎是不可能的。为此,我必须使用按位 OR 设置模板缓冲区,并且模板函数必须是按位 AND。但是,我能看到的模板缓冲区上的唯一操作是:KEEP、ZERO、REPLACE、INCR、DECR 和 INVERT,唯一的功能是:NEVER、ALWAYS、LESS、EQUAL、LEQUAL、GEQUAL、GREATER 和 NOTEQUAL。

    有什么方法可以使用模板缓冲区以某种方式获得这种 OR 和 ANDing 行为?如果没有,是否有其他方法可以有效地渲染光体积?

    最佳答案

    要获得 ORing 更新行为,请使用 glStencilMask结合 GL_REPLACE .要获得 ANDing 测试行为,请使用 glStencilFunc mask参数结合GL_EQUAL .在这两种情况下,您都需要 ref glStencilFunc 的参数成为 0xff .

    关于OpenGL 模板缓冲区 OR 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3776973/

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