gpt4 book ai didi

c++ - 获取当前像素后面的像素

转载 作者:行者123 更新时间:2023-11-30 01:17:16 24 4
gpt4 key购买 nike

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

而且我想知道如何获取特定像素 (x, y) 的颜色,而不是直接获取其颜色,而是获取后面下一个对象的颜色。

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

我想知道如何从蓝色三角形获取颜色,如果红色三角形不在此处,我会从 glReadPixels 获取颜色。

最佳答案

默认的帧缓冲区只保留最上面的颜色。要获得您的建议,需要特定的渲染管道。

例如你可以:

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

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

编辑:

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

但是,我想不出有什么方法可以在没有着色器的情况下重新渲染场景以获取您在步骤 3 中所需的信息,因为它既是标准深度测试又是针对提供的深度纹理的测试。这并不意味着没有,只是我不精通 GL 技巧来思考它。

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

关于c++ - 获取当前像素后面的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24766883/

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