OpenGL GltexImage2d 함수와 함께 그레이 스케일 이미지를 사용할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/680125

  •  22-08-2019
  •  | 
  •  

문제

그레이 스케일 이미지이므로 채널이 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 세 번째 인수를 위해.

편집 (주석에 대한 답장) :

7 번째 인수를 설정했을 때 GL_LUMINANCE (3 위), 그림은 완전히 왜곡됩니다. Dicom Pixel 형식을 사용하면 7 번째 인수가 GL_RGBA 몇 가지 이유.

이상한 행동은 내가 사용하기 때문입니다 DICOM 기준. 출력 정수 픽셀 값을 사용하는 특정 DICOM 리더 (픽셀 값이 일반 최대 255를 초과 할 수 있으므로). 이상한 이유로 OpenGL에게 RGBA 형식을 사용하고 있다고 말하지만 정수 값을 전달하는 것이 완벽한 이미지를 만들었습니다.

어쨌든 dicom> 255 픽셀 값을 자르고 있었기 때문에 Glbyte 배열에 값을 복사하는 것이 논리적으로 보였습니다. 그러나 그렇게한 후에는 SIGSEGV (세그먼테이션 오류)가 호출 할 때 발생했습니다. glTexImage2D. 7 번째 매개 변수를 변경합니다 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