2013-07-05 3 views
3

OpenGL 환경에서 CImg을 사용하고 있습니다. 텍스처를 추가하려고하면 각 색상이 텍스처 내에서 별도의 타일로 분리 된 것처럼 보입니다. 예를 들어,이처럼 보이는 텍스처 사용하려고 할 때이처럼 보이는 내 프로그램에OpenGL 텍스처 색상 분리

이 온다 아웃 :

내가 로딩 해요 텍스처를 Gimp에서 24 비트 색 깊이, RBG로 저장되는 512x512 .bmp 파일입니다. 김프가 허용하는 다른 포맷을 시도했지만 CImg에서 에러가 발생합니다.

이것은 I 감촉 로딩 방법이다

glBindTexture(GL_TEXTURE_2D, 13); 
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 

CImg<unsigned char> src("MilkyWay.bmp"); 
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, src.width(), src.height(), 
    0, GL_RGB, GL_UNSIGNED_BYTE, src); 

과이 I 감촉 표시 방법이다

glEnable (GL_TEXTURE_2D); 
glBindTexture (GL_TEXTURE_2D, 13); 
glBegin (GL_QUADS);   
    glTexCoord2f (0.0, 1.0); 
    glVertex3f (-120.0, 120.0, 0.0); 
    glTexCoord2f (1.0, 1.0); 
    glVertex3f (120.0, 120.0, 0.0); 
    glTexCoord2f (1.0, 0.0); 
    glVertex3f (120.0, -120.0, 0.0); 
    glTexCoord2f (0.0, 0.0); 
    glVertex3f (-120.0, -120.0, 0.0); 
glEnd(); 

답변

1

CIMG 저장 채널 비 - 인터리빙 (또는 '평면')하지만 GL을 그 반대를 기대하고있다. 결과는 당신이 보는 것입니다.

데이터를 재정렬 할 수도 있고 (CImg이 대신 할 수도 있음) 채널도 소스 형식으로 인터리브되는 경향이 있으므로 이미지 라이브러리에서 다시 인터리브하기위한 중간 단계 만 디 인터리브하도록하는 경향이 있습니다 GL로 전달하기 전에 비효율적입니다. 대신 직접 사용할 수 있도록 이미지 데이터를로드하는 다른 방법을 사용하는 것이 좋습니다.

BMP는 매우 쉽게 읽을 수있는 형식이지만이 작업을 수행 할 많은 라이브러리가 있습니다.

+0

감사합니다. 어떤 이미지를 읽는 도서관이 있습니까? – Vicker

+1

다른 사람이 이것을 읽을 경우에 대비하여 업데이트하고 싶습니다. 나는 http://www.lonesock.net/soil.html에서 SOIL을 다운로드했고 그것은 놀라운 일을했다. 도와 줘서 고마워, JasonD! – Vicker