OpenGL Rendering 2D в трехмерном пространстве

В настоящее время я работаю над проектом как часть моей курсовой работы и понял, что мне нужно иметь HUD для отображения информации пользователю, наткнулся на glOrtho и пытался его использовать, однако у меня есть некоторые проблемы с ним, так как он отображает точку 2D в момент, но не все трехмерные объекты на заднем плане.
Сделали разные функции для рисования 2D и 3D, чтобы основная функция рисования была менее загромождена.

void draw3D
{
glEnable(GL_DEPTH_TEST);

GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);

GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat lightPos[] = {-2 * floorSize, floorSize, 4 * floorSize, 1.0f};
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (float)resizeWindowW/(float)resizeWindowH, 1.0, 50000000000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -9.0f);

Cam.setView();

glColor3f(1.0f, 1.0f, 1.0f);

oldRocket();
drawEarth();
}

.

void draw2D()
{
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glDisable(GL_TEXTURE_2D);
//glDisable(GL_LIGHTING);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-windowW/2, windowW/2, -windowH/2, windowH/2, -1000.0, 1000.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

drawCrosshair();
}

.

void drawScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

draw3D();
draw2D();

//glDisable(GL_CULL_FACE);
glDisable(GL_TEXTURE_2D);
glutSwapBuffers();
}

На данный момент все, что он рисует, — это точка в центре экрана с черным фоном, и в течение некоторого времени он пытался заставить ее рисовать правильно, но безрезультатно.
Следовали этому подходу, так как он работал над рендерингом, где, как и раньше, у меня просто был черный экран.

  • очистить экран
  • 3D:
    • включить освещение, z-тест и т. д.
    • установить режим активной матрицы на проекцию
    • загрузить идентичность и установить перспективную проекцию
    • установить режим активной матрицы обратно в режим просмотра модели
    • нарисовать все 3D
  • 2D:
    • отключить освещение, z-тест и т. д.
    • установить режим активной матрицы на проекцию
    • загрузить идентичность и установить ортогональную проекцию
    • установить режим активной матрицы обратно в режим просмотра модели
    • нарисовать все 2D
  • буфер обмена

Обновлен код с перспективной матрицей, и теперь он отображается правильно.

1

Решение

Добавление матрицы перспективы между матрицами устранило проблему, и теперь все отображается правильно.

0

Другие решения


По вопросам рекламы [email protected]