我可以使用灰度图像符合OpenGL glTexImage2D功能?
题
我有仅具有1信道,因为它是一个灰度图像的纹理。当我通过像素到glTexImage2D,它出来的红色。(显然是因为信道1是红色; RGB)
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA,
dicomImage->GetColumns(), dicomImage->GetRows(),
0, GL_RGBA, GL_UNSIGNED_BYTE, pixelArrayPtr);
我改变GL_RGBA?如果是这样,什么?
解决方案
将其更改为GL_LUMINANCE。请参见 http://www.opengl.org/文档/功能/ man_pages /硬拷贝/ GL / HTML / GL / teximage2d.html
其他提示
看来,我应该为第三个参数,而不是使用GL_LUMINANCE
GL_RGBA
。
编辑(在回复注释):
当我设置第七参数GL_LUMINANCE
(以及第3),则图像变完全扭曲。与DICOM像素格式,看来该第七参数必须GL_RGBA
出于某种原因。
在奇怪的行为,是因为我使用的 DICOM标准。特定DICOM读者我使用输出整数像素值(作为像素值可能超过255个的正常最大)。一些奇怪的原因,告诉我使用的RGBA格式的OpenGL,但传递的整数值呈现的完美图像的组合。
由于我反正截断DICOM> 255的像素值,这似乎逻辑将这些值中的GLbyte阵列复制。但是,这样做之后,一个SIGSEGV(分段错误)调用glTexImage2D
时发生。改变第七参数GL_LUMINANCE
(如通常要求)返回的功能正常。
奇怪是吗?
所以,记下使用DICOM图像格式的所有开发者:你需要把它传递给glTexImage2D
之前的整数数组转换为字符数组,或者刚刚成立的第7参数GL_RGBA
(可能是不推荐的更新版本)。
在FragmentShader,可以编写:
uniform sampler2D A;
vec3 result = vec3(texture(A, TexCoord).r);
在cpp文件,则可以写成:
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RED,
dicomImage->GetColumns(), dicomImage->GetRows(),
0, GL_RED, GL_UNSIGNED_BYTE, pixelArrayPtr);
不隶属于 StackOverflow