如何从GLSL获得浮点颜色

时间:2014-04-28 08:59:20

标签: opengl glsl

我目前面临一个与OpenGL管道密切相关的问题,以及着色器的使用。

实际上,我正在研究一个项目,其中一个步骤包括从我们使用OpenGL生成的图像中读取像素,尽可能准确:我的意思是我不想读取整数,而是想读取浮点数。 (因此,我不想读取像素的值(134,208,108),而是想获得类似(134.180,207.686,108.413)的东西。)

对于这个项目,我使用了顶点和片段着色器来渲染我的场景。我假设片段着色器计算并返回的颜色是4个浮点数(每个RGBA组件一个)的向量,属于"连续" [0,1]内部。但是,我如何在我的C ++文件中获取它?有办法吗?

我想通过将格式参数设置为glReadPixels()并将像素数据的数据类型设置为GL_RGBA,在将场景渲染到缓冲区后调用GL_FLOAT函数。但是我感觉与我们读取的像素相关的值已经被同时转换为整数,因为我最终获得的浮点数对应于[0,255]被钳制到[0的区间], 1],精度没有任何提高。仔细研究OpenGL的这些观点可以强化这个想法:我认为在渲染我的场景和调用glReadPixels()之间确实有一个演员。

您对我达到目标的方式有任何了解吗?

1 个答案:

答案 0 :(得分:0)

片段着色器返回的GL_RGBA格式将像素分量存储为8位整数。您应该使用浮点格式,例如GL_RGBA16F或GL_RGBA32F,其中16和32是每个组件的深度。