2014-12-21 4 views
1

여러 색상의 직사각형이 있는데 그 중 하나에 텍스처를 추가하려고합니다. 그러나 주어진 사각형에 텍스처를 적용하면 검정색으로 변합니다. 아래는 텍스처를로드하는 데 사용하는 함수입니다.C++ GL_QUAD에 텍스처를 추가하고 검은 색으로 표시됩니다.

GL_QUADS, 나는 다음이 그려 다른 함수에서
GLuint GLWidget:: LoadTexture(const char * pic, int width, int height){ 

GLuint Texture; 
BYTE * data; 
FILE * picfile; 

picfile = fopen(pic, "rb"); 
if (picfile == NULL) 
    return 0; 

data = (BYTE *)malloc(width * height * 3); 

fread(data, width * height, 3, picfile); 
fclose(picfile); 

glGenTextures(1, &Texture); 
glBindTexture(GL_TEXTURE_2D, Texture); 

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_MIN_FILTER, GL_LINEAR); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, data); 

return Texture; 
} 

...

GLuint myTex = LoadTexture("texture.bmp", 500, 500); 

    glEnable(GL_TEXTURE_2D); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

    glBindTexture(GL_TEXTURE_2D, myTex); 

    glBegin(GL_QUADS); 

    glTexCoord2f(1, 1); glVertex3f(42, 10, 42); 
    glTexCoord2f(1, 0); glVertex3f(42, 10, -42); 
    glTexCoord2f(0, 0); glVertex3f(-42,10,-42); 
    glTexCoord2f(0, 1); glVertex3f(-42,10, 42); 

    glEnd(); 

나는, 덕분에 좋은 것 그 잘못 하겠어 어디 사람이 알려주 수 있다면!

+1

제안 된 태그로 나왔습니다. Qt를 사용하는 것이 적절하다고 생각합니다. 그것은 또한 @derhass가 다른 방법으로는 사용하지 않았을 독특한 Qt 기능성을 사용하는 방향으로 나를 가리킬 수 있음을 의미했습니다. – user3151321

답변

2

이 호출

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, data); 

가 잘못되었습니다. GL_RGB8은 유효한 내부 형식이지만 형식의 유효한 열거 형이 아닙니다. GL_RGB, GL_UNSIGNED_BYTE을 형식으로 사용하고 클라이언트 측 데이터가 채널당 8 개이지만 부호없는 int 데이터가있는 3 개 채널 인 경우 입력하십시오.

또 다른 것은 이것은 당신이 BMP 파일을 처리하는 것을 제안

LoadTexture("texture.bmp", 500, 500); 

이지만, 로더는 완전히 RAW 이미지 데이터를 다루고있다.

+0

감사합니다. BMP 파일에 사용할 수있는 특정 로더가 있습니까? – user3151321

+0

@ user3151321 : 질문에 "qt"라는 태그가 붙어 있으므로, Qt의 통합 이미지로드 기능을 사용할 수 있습니다.이 기능은 QImage 클래스를 통해 사용할 수 있습니다. – derhass

관련 문제