OpenGL 2D HUD в 3D-приложении - PullRequest
       33

OpenGL 2D HUD в 3D-приложении

4 голосов
/ 03 декабря 2011

Я пытался создать hud в своем приложении OpenGL.Осмотревшись, кажется, что это можно сделать с помощью ортопедической проекции, но до сих пор я не смог заставить программу правильно отображаться.То, что происходит вместо рендеринга поверх моего дисплея, я получаю странные графические глюки, как показано здесь:

enter image description here

Если я закомментируюкод HUD, все отрисовывается отлично.

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);

//Set up projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//Using gluPerspective. It's pretty easy and looks nice.
gluPerspective(fov, aspect, zNear, zFar);

//Set up modelview matrix
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//3D rendering

glDepthMask(GL_FALSE);
glDisable(GL_DEPTH_TEST);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,window_width,0,window_height); //left,right,bottom,top

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor3f(0.0,0.0,1.0);
glBegin(GL_QUADS);
    glVertex2f(50,50);
    glVertex2f(50,100);
    glVertex2f(100,100);
    glVertex2f(100,50);
glEnd();

Ответы [ 2 ]

4 голосов
/ 04 декабря 2011

Как только вы закончите рендеринг HUD, вам нужно снова включить глубину записи

glDepthMask(GL_TRUE);
2 голосов
/ 04 декабря 2011

Когда вы очищаете буферы при визуализации вашего HUD, все, что было нарисовано до сих пор (ваша 3D-сцена), также будет очищено.Так что не очищайте буфер дважды.

...