我一直在寻找如何在我的 OpenGL 场景中绘制指标轴。该项目嵌套在 Qt OpenGL 小部件中,但我认为问题与 Qt 无关。
我在这里和多年前的论坛上发现建议存储视口和数据,为底角加载新的,应用我的旋转和绘制,然后恢复矩阵。这似乎对我最有利,但我猜我仍然缺少我的 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-axis 函数仍然给了我我的飞机,有了它,我得到了一个大的空白场景。我在实现 drawAxis 的过程中是否遗漏了一些东西?我应该为该功能设置另一个相机或类似的东西吗?