백그라운드에서 빨간색 회전 큐브를 보여주는 프로그램을 만들려고합니다. 텍스처가있는 쿼드가 오버레이되어 있습니다.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();