2012-11-01 5 views
0

백그라운드에서 빨간색 회전 큐브를 보여주는 프로그램을 만들려고합니다. 텍스처가있는 쿼드가 오버레이되어 있습니다.OpenGL에서 부분적으로 투명한 HUD 스타일 오버레이

텍스처는 흰색 배경 위에 검은 색 "Hello World"단어의 간단한 24 비트 비트 맵입니다. 큐브를 오버레이 뒤에서 볼 수 있도록 흰색 배경을 투명하게하고 싶습니다. 이미지 로더는 각 픽셀의 값을 확인하고 관련 알파 값을 추가하여 이미지를 32 비트 비트 맵으로 변환합니다.

현재 내 프로그램에는 검은 색 텍스트가 있지만 오버레이는 빨간색 배경, 큐브와 같은 색으로 표시됩니다. 다음은 설정 초기 텍스처에 사용되는 코드입니다 :

if (bitmap->Load("test.bmp")) { 
    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexImage2D(GL_TEXTURE_2D, 0, 3, bitmap->GetWidth(), bitmap->GetHeight(), 
     0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap->GetPixelData()); 
} 

는 그리고이 경우에 아무것도 무엇을 방해, 내 표시 기능의 전부입니다.

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(40, 1, 0.1, 27.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glColor3f(1.0, 0.0, 0.0); 
glTranslatef(0.0, 0.0, -1.1); 
glRotatef(angle, 1.0, 1.0, 0.0); 
glutSolidCube(0.1); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0.0, 640, 480, 0.0, -1.0, 10.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glDisable(GL_CULL_FACE); 

glClear(GL_DEPTH_BUFFER_BIT); 

glEnable(GL_TEXTURE_2D); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glBindTexture(GL_TEXTURE_2D, texture); 

glBegin(GL_QUADS); 
    glTexCoord2d(0.0, 0.0); glVertex2f(0.0, 0.0); 
    glTexCoord2d(1.0, 0.0); glVertex2f(320.0, 0.0); 
    glTexCoord2d(1.0, 1.0); glVertex2f(320.0, 240.0); 
    glTexCoord2d(0.0, 1.0); glVertex2f(0.0, 240.0); 
glEnd(); 

glDisable(GL_BLEND); 
glDisable(GL_TEXTURE_2D); 

glFlush(); 
glutSwapBuffers(); 

답변

0

기본 텍스처 환경은 들어오는 텍셀 값이 현재의 색 (큐브에서 빨간색)에 혼합 GL_MODULATE입니다.

텍스트를 렌더링하기 전에 GL_DECAL으로 전환하거나 glColor3ub(255,255,255)으로 전환하십시오.

관련 문제