我目前面临一个与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()
之间确实有一个演员。
您对我达到目标的方式有任何了解吗?
答案 0 :(得分:0)
片段着色器返回的GL_RGBA格式将像素分量存储为8位整数。您应该使用浮点格式,例如GL_RGBA16F或GL_RGBA32F,其中16和32是每个组件的深度。