我一直在寻找如何在我的OpenGL场景中绘制指标轴。该项目嵌套在Qt OpenGL小部件中,但我认为问题与Qt无关。OpenGL绘图轴角
我在这里和几年前的论坛上发现,建议存储视口和数据,为Bottom角落加载新视图,应用我的旋转和绘制,然后恢复矩阵。这对我来说似乎是最有利的,但我猜测我仍然缺少一些关于OpenGL知识的重要信息。
现在我只是把它借鉴-x可X一条红线,所以我预计在底部的红色正方形屏幕左边:
void GLWidget::drawAxis()
{
float tempPro[16];
float tempMod[16];
glGetFloatv(GL_PROJECTION_MATRIX, &tempPro[0]);
glGetFloatv(GL_MODELVIEW_MATRIX, &tempMod[0]);
glViewport(0, 0, 50, 50);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, 1.0f, 0.1f, 20.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glBegin(GL_LINES);
glColor3f(1.0f, 0.0f, 0.0f);
glEnable(GL_LINE_SMOOTH);
glLineWidth(1.5);
glVertex3f(-1000, 0, 0);
glVertex3f(1000, 0, 0);
glEnd();
glPopMatrix();
glViewport(0, 0, 960, 600);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(tempPro);
gluPerspective(45.0f, (960.0/600.0), 0.1f, 400.0f);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(tempMod);
}
相反,我什么也没得到,只是一个大空的场景,我不确定如何继续。我paintGL基本上是:
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
Camera.Render();
glTranslatef(0.0, 0.0, 0.0);
glBegin(GL_QUADS);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(50.0f, 0.0f, 50.0f);
glVertex3f(50.0f, 0.0f, -50.0f);
glVertex3f(-50.0f, 0.0f, -50.0f);
glVertex3f(-50.0f, 0.0f, 50.0f);
glEnd();
drawAxis();
}
不调用draw轴功能仍然给我我的飞机,有了它,我得到一个大空白的场景。我在如何执行drawAxis时错过了一些东西?我应该为这个功能设置另一个摄像头吗?
尝试增加以'GL_DEPTH_TEST'到'glDisable'通话绘制行之前。 – didierc
从函数中删除视口部分我在常规场景中出现红线,所以我不确定会有帮助。 虽然仍尝试过,但无济于事。 – Poken1151
当你说节时,你是指从'glViewport'到'glBegin'? – didierc