Frage

Ich habe eine Textur, die nur 1 Kanal hat, wie es ein Graustufenbild ist. Wenn ich die Pixel in zu glTexImage2D Pass es rot herauskommt. (Offensichtlich weil Kanal 1 ist rot; RGB)

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA,
    dicomImage->GetColumns(), dicomImage->GetRows(),
    0, GL_RGBA, GL_UNSIGNED_BYTE, pixelArrayPtr);

Habe ich GL_RGBA ändern? Wenn ja, was?

War es hilfreich?

Andere Tipps

Es scheint, dass ich GL_LUMINANCE statt GL_RGBA für das 3. Argument verwendet werden soll.

Edit (in Antwort auf Kommentare):

Als ich das siebte Argument auf GL_LUMINANCE (wie auch die 3.), geht das Bild völlig verzerrt. Mit dem DICOM-Pixel-Format, scheint es, dass das 7.e Argument muss aus irgendeinem Grunde GL_RGBA werden.

Das seltsame Verhalten ist, weil ich die DICOM Standard. Der besondere DICOM reader Ich verwende Ausgänge ganzzahligen Pixelwerten (wie Pixelwerte des Normal maximal 255 nicht überschreiten). Aus irgendeinem seltsamen Grunde der Kombination OpenGL zu sagen, dass ich ein RGBA-Format verwenden, aber ein perfektes Bild in ganzzahligen Werten gemacht geben.

Weil ich die DICOM> 255 Pixelwerte ohnehin abgeschnitten wurde, schien es logisch, die Werte in einer GLbyte Array zu kopieren. Doch nach so tun, eine SIGSEGV (Segmentierungsfehler) aufgetreten ist, wenn glTexImage2D Aufruf. Ändern des 7. Parameter GL_LUMINANCE zurückgegeben (wie es normalerweise erforderlich), um die Funktionalität zu normal.

Schräge eh?

Also, ein Hinweis an alle Entwickler, das DICOM-Bildformat: Sie müssen das Integer-Array zu einem char-Array konvertieren, bevor es glTexImage2D, oder einfach nur gesetzt das 7.e Argument GL_RGBA (die später wahrscheinlich nicht empfohlen) vorbei.

in dem FragmentShader, können Sie schreiben:

uniform sampler2D A;
vec3 result = vec3(texture(A, TexCoord).r);

in der CPP-Datei, können Sie schreiben:

glTexImage2D(
GL_TEXTURE_2D, 0, GL_RED,
dicomImage->GetColumns(), dicomImage->GetRows(),
0, GL_RED, GL_UNSIGNED_BYTE, pixelArrayPtr);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top