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/documentation/specs/man_pages/hardcopy/gl/html/gl/teximage2d.html
다른 팁
내가 사용해야하는 것 같습니다 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);