继续这个问题:
GLSL : accessing framebuffer to get RGB and change it
是否可以开发如下基于GLSL的程序?
- 绘制对象1
- 使用着色器获取深度缓冲区(也保存 RGB)
- 同时绘制对象 1、对象 2
- 获取深度
- 检查深度是否不同(深度 2 与深度 4)
- 绘制对象1 :对于深度不改变的范围->绘制为原始RGB :对于深度改变的范围->用不同的RGB进行绘制
我使用 glut 函数确认了这个区分对象 1 被其他对象隐藏的算法。 我使用了glReadbuffer、glDrawbuffer函数。但是那些太慢了,我想使用 GLSL。
最佳答案
如果唯一的目标是在对象 1 隐藏在对象 2 后面(对象 1 的深度已更改的像素)后面时使用不同的颜色集渲染对象 1,我会采用完全不同的方法。
- 仅使用深度写入绘制对象2(
glDrawBuffer(GL_NONE)
或glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)
) - 绘制对象 1,并将深度测试设置为
glDepthFunc(GL_GREATER)
以及当对象 1 位于对象 2 后面时所需的颜色 - 绘制对象 1,深度测试设置为
glDepthFunc(GL_LESS)
,并在对象 1 位于对象 2 前面时设置所需的颜色。
与您在问题中描述的算法相比,不需要任何读回操作或额外的帧缓冲区
关于opengl - 访问片段着色器的RGB和深度缓冲区: GLSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42018019/