获得当前像素后面的像素

Get pixel behind the current pixel

本文关键字:像素 前像      更新时间:2023-10-16

我正在用c++编写一个程序,在一个窗口中渲染3D模型。我使用glReadPixels来获取窗口中显示的风景图像。

我想知道如何得到,对于一个特定的像素(x, y),不是直接得到它的颜色,而是得到后面下一个物体的颜色。

如果我渲染一个蓝色三角形,在它前面有一个红色三角形,glReadPixels会从红色三角形中获得红色。

我想知道如何从蓝色三角形中获得颜色,如果红色三角形不在这里,我将从glReadPixels中获得颜色。

默认的framebuffer只保留最上面的颜色。要实现您的建议,需要一个特定的呈现管道。

例如:

  1. 创建一个与目标视口相同尺寸的屏幕外帧缓冲区
  2. 渲染深度仅传递到屏幕外帧缓冲区,将深度值存储在附加纹理
  3. 使用特殊的着色器重新渲染场景,只绘制转换后的Z值小于先前记录的深度缓冲区中的值的像素

最后一次渲染的最终结果应该是原始场景的顶层剥离。

编辑:

它只需要少量的新代码来创建屏幕外帧缓冲并渲染场景的深度版本,你可以使用现有的渲染管道与之结合来执行步骤1和2。

然而,我想不出任何方法,你可以重新渲染场景,以获得你想要的信息在第3步没有着色器,因为它既标准的深度测试加上测试提供的深度纹理。这并不意味着没有一个,只是我不太精通GL技巧来思考它。

对于屏幕上的特定点,我可以通过摆弄渲染系统来尝试完成相同的任务,但它们都比仅仅编写着色器要复杂得多。