获得当前像素后面的像素
Get pixel behind the current pixel
我正在用c++编写一个程序,在一个窗口中渲染3D模型。我使用glReadPixels来获取窗口中显示的风景图像。
我想知道如何得到,对于一个特定的像素(x, y),不是直接得到它的颜色,而是得到后面下一个物体的颜色。
如果我渲染一个蓝色三角形,在它前面有一个红色三角形,glReadPixels会从红色三角形中获得红色。
我想知道如何从蓝色三角形中获得颜色,如果红色三角形不在这里,我将从glReadPixels中获得颜色。
默认的framebuffer只保留最上面的颜色。要实现您的建议,需要一个特定的呈现管道。
例如:
- 创建一个与目标视口相同尺寸的屏幕外帧缓冲区
- 渲染深度仅传递到屏幕外帧缓冲区,将深度值存储在附加纹理
- 使用特殊的着色器重新渲染场景,只绘制转换后的Z值小于先前记录的深度缓冲区中的值的像素
最后一次渲染的最终结果应该是原始场景的顶层剥离。
编辑:它只需要少量的新代码来创建屏幕外帧缓冲并渲染场景的深度版本,你可以使用现有的渲染管道与之结合来执行步骤1和2。
然而,我想不出任何方法,你可以重新渲染场景,以获得你想要的信息在第3步没有着色器,因为它既标准的深度测试加上测试提供的深度纹理。这并不意味着没有一个,只是我不太精通GL技巧来思考它。
对于屏幕上的特定点,我可以通过摆弄渲染系统来尝试完成相同的任务,但它们都比仅仅编写着色器要复杂得多。
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 计算gpu前缓冲区中像素的平均值,而无需将前缓冲区复制回系统内存
- C/C++LIBTIFF:需要从BW TIFF文件中读取白色和黑色像素的像素位置
- glsl-获取像素颜色[像素着色器]
- 我如何打开和解析png像素逐像素