我正在学习遗留的OpenGL,并发现来自RGBA镜像的glGetTexImage2D(GL_LUMINANCE)只返回红色组件作为结果。
根据一些手册页面,我希望结果是R+G+B。
这甚至是一个用于Mesa3D的test case。
为什么是这样的呢?我查看了OpenGL规范,但找不到与此行为匹配的描述。
更新:
此外,glCopyTexImage2D(GL_LUMINANCE)仅从RGBA帧缓冲区复制红色分量作为亮度,这似乎是相关的。我也不明白这一点。
发布于 2019-02-17 01:20:21
根据documentation for glTexImage2D的说法
GL_LUMINANCE
每个元素都是单个亮度值。GL将其转换为浮点数,然后通过复制三次红色、绿色和蓝色的亮度值并为alpha附加1来将其组合为RGBA元素。然后将每个分量乘以带符号的比例因子GL_c_SCALE,与带符号的偏置GL_c_BIAS相加,并钳位到范围0,1
因此,在上传时,您上传的是单通道图像。从GPU下载图像时,您会得到相同的结果,这是有道理的。
在您链接到的test_fbo_readpixels_lum_as_rgba()代码中,上传的亮度图像是2x2图像,其中每个像素包含0.25。然后,他们将图像下载为RGBA,并期望得到4个像素,每个像素包含(0.25,0.0,0.0,1.0)。这与您所看到的内容和上面的文档所说的内容相匹配。
https://stackoverflow.com/questions/54724781
复制相似问题