获取当前像素后面的像素

Dem*_*mod 1 c++ opengl glut glreadpixels

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

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

如果我渲染一个蓝色三角形,并在它前面有一个红色三角形,glReadPixels会给我红色三角形的红色.

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

Jhe*_*ico 5

默认帧缓冲区仅保留最顶层的颜色.要获得您建议的内容,需要特定的渲染管道.

例如,您可以:

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

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

编辑:

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

但是,我无法想到你可以在没有着色器的情况下重新渲染场景以获得步骤3中所需的信息,因为它既有标准深度测试,也有针对提供的深度纹理的测试.这并不意味着没有一个,只是因为我没有精通GL技巧来思考它.

我可以想到通过摆弄渲染系统来尝试为屏幕上的特定点完成相同任务的其他方法,但它们都比仅仅编写着色器更复杂.