簡體   English   中英

角落中的OpenGL繪圖軸

[英]OpenGL Drawing Axis in Corner

我一直在尋找如何在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();

}

不調用繪制軸函數仍然可以給我提供飛機,有了它,我得到了一個大的空白場景。 我在實現drawAxis的過程中是否缺少某些東西? 我是否應該為該功能設置其他攝像機?

  • 您可以使用glPushMatrix()和glPopMatrix()保存和還原Projection和ModelView矩陣的狀態。
  • 您沒有將ModelView矩陣設置為任何有用的東西。

嘗試這樣的事情:

void GLWidget::drawAxis()
{
    glViewport(0, 0, 50, 50);

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    gluPerspective(45.0f, 1.0f, 0.1f, 20.0f);

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    //This really has to come from your camera....
    gluLookAt(10.0f,10.0f,10.0f, 0.0f,0.0f,0.0f, 0.0f,0.1f,0.0f);

    glColor3f(1.0f, 0.0f, 0.0f);
    glEnable( GL_LINE_SMOOTH );
    glLineWidth( 1.5 );
    glBegin(GL_LINES);
        glVertex3f(-1000, 0, 0);
        glVertex3f(1000, 0, 0);
    glEnd();

    //Restore View
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glViewport(0, 0, 960, 600);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM