我有仅具有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 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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top