我目前正在研究一个项目,作为课程的一部分,并意识到我需要有一个HUD来向用户显示信息,偶然发现glOrtho并且一直在尝试使用它但是它有一些问题,因为它正在呈现此刻是2D点,而不是背景中的所有3D对象。 已经为绘制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();
}
此刻所有的绘图都是屏幕中间带有黑色背景的点,并且一直试图让它正确绘制一段时间而没有结果。 已经遵循这种方法,因为它在渲染点之前就像我刚才有黑屏一样。
使用透视矩阵更新代码,现在可以正确显示。
答案 0 :(得分:0)
在矩阵之间添加透视矩阵可以解决问题,现在一切都正常显示。