Domanda

Ho una texture che ha solo 1 canale come esso è un'immagine in scala di grigi. Quando passo i pixel a glTexImage2D, esce rosso. (Ovviamente perché il canale 1 è rosso; RGB)

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

faccio a cambiare GL_RGBA? Se sì, cosa?

Altri suggerimenti

Sembra che dovrei usare GL_LUMINANCE anziché GL_RGBA per il 3 ° argomento.

Modifica (in risposta ai commenti):

Quando ho creato il 7 ° argomento di GL_LUMINANCE (così come il 3 °), il quadro va completamente distorta. Con il formato DICOM pixel, sembra che il 7 ° argomento deve essere GL_RGBA per qualche motivo.

Il comportamento strano è perché sto utilizzando il standard DICOM . La particolare lettore DICOM sto usando uscite valori dei pixel interi (come valori di pixel possono superare il normale massimo di 255). Per qualche strana ragione la combinazione di dire OpenGL che sto usando un formato RGBA, ma passando in valori interi reso un'immagine perfetta.

Perché ero troncare i valori DICOM> 255 pixel in ogni caso, è sembrato logico copiare i valori a una matrice GLbyte. Tuttavia, dopo averlo fatto, un SIGSEGV (errore di segmentazione) si è verificata quando si chiama glTexImage2D. Cambiare il settimo parametro GL_LUMINANCE (come è normalmente richiesto) ha restituito la funzionalità alla normalità.

Strano eh?

Quindi, una nota a tutti gli sviluppatori che utilizzano il formato di immagine DICOM: È necessario convertire l'array intero a un array di caratteri prima di passarlo al glTexImage2D, o semplicemente impostare il settimo argomento GL_RGBA (il più tardi probabilmente non è consigliabile).

nel FragmentShader, è possibile scrivere:

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

nel file cpp, è possibile scrivere:

glTexImage2D(
GL_TEXTURE_2D, 0, GL_RED,
dicomImage->GetColumns(), dicomImage->GetRows(),
0, GL_RED, GL_UNSIGNED_BYTE, pixelArrayPtr);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top