В настоящее время я работаю над проектом как часть моей курсовой работы и понял, что мне нужно иметь 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();
}
На данный момент все, что он рисует, — это точка в центре экрана с черным фоном, и в течение некоторого времени он пытался заставить ее рисовать правильно, но безрезультатно.
Следовали этому подходу, так как он работал над рендерингом, где, как и раньше, у меня просто был черный экран.
Обновлен код с перспективной матрицей, и теперь он отображается правильно.
Добавление матрицы перспективы между матрицами устранило проблему, и теперь все отображается правильно.