访问片段着色器的RGB和深度缓冲区:GLSL

时间:2017-02-03 06:23:50

标签: opengl glsl

继续这个问题:

GLSL : accessing framebuffer to get RGB and change it

是否有可能开发基于GLSL的程序如下?

  1. draw object1
  2. 使用着色器获取深度缓冲区(也保存rgb)
  3. 同时绘制对象1,对象2
  4. get detph
  5. 检查深度是否不同(深度2对深度4)
  6. 绘制对象1 :对于深度未改变的范围 - >绘制为原始RGB :对于深度改变的范围 - >用不同的RGB绘制
  7. 我确认了这个算法区分对象1被其他对象使用glut函数隐藏。 我使用了glReadbuffer,glDrawbuffer函数。但是那些太慢了,我想用GLSL。

1 个答案:

答案 0 :(得分:2)

如果唯一的目标是当object1隐藏在object2后面时(即深度已经改变的object1的像素)使用不同的颜色集渲染它,我将采用完全不同的方法。

  1. 仅使用深度书写(glDrawBuffer(GL_NONE)glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)
  2. 绘制object2
  3. 将深度测试设置为glDepthFunc(GL_GREATER)的object1和object1位于object2之后的颜色绘制
  4. 将object1设置为glDepthFunc(GL_LESS),并将object1位于object2前面时绘制所需的颜色。
  5. 与您在问题中描述的算法相比,不需要任何回读操作或额外的帧缓冲区