歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

QT與OpenGL之坐標軸縮放

在我們使用OpenGL畫點的時候,默認的中心是在屏幕的中心,左右,上下,前後都是-1到1的區間,如果我們需要繪制大於這個區間的點怎麼辦呢?

方法一:

我們可以將所有的需要繪制的點轉化到-1到1的區間。

方法二:

縮放OpenGL的坐標軸,使得重新建立的坐標軸符合我們新的標准。

下面我們就用方法二來實現如何重建坐標軸:

重新建立坐標軸,我們需要利用正交視角,可以使用glortho函數實現。

void GLWidget::resizeGL(int width, int height)
{
    GLfloat nRange = 100.0f;
    if(0 == height)
        height = 1;//防止一條邊為0
    glViewport(0, 0, (GLint)width, (GLint)height);//重置當前視口,本身不是重置窗口的,只不過是這裡被Qt給封裝好了


    //glOrtho(left, right, bottom, top, near, far);
    if (width <= height)
        glOrtho(-nRange, nRange, -nRange*height/width, nRange*height/width, -nRange, nRange);
    else
        glOrtho(-nRange*width/height, nRange*width/height, -nRange, nRange, -nRange, nRange);

    glMatrixMode(GL_PROJECTION);//選擇投影矩陣
    glLoadIdentity();//重置選擇好的投影矩陣
  // gluPerspective(45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0);//建立透視投影矩陣
  //  glMatirxMode(GL_MODELVIEW);//以下2句和上面出現的解釋一樣
  // glLoadIdentity();

}

glOrtho函數總共六個參數,在上面代碼注釋了,分別代表了左,右,下,上,前,後,這是按照三維的標准設定的。

在利用畫線函數來實現坐標軸:

glColor3f( 1.0f, 0.0f, 0.0f );//指定線的顏色,藍色

          glBegin( GL_LINES );
          {
              // x-axis

              glVertex3f( -100.0f, 0.0f, 0.0f);
              glVertex3f( 100.0f, 0.0f, 0.0f);

              // x-axis arrow

              glVertex3f( 100.0f, 0.0f, 0.0f);
              glVertex3f( 93.0f, 3.0f, 0.0f);
              glVertex3f( 100.0f, 0.0f, 0.0f);
              glVertex3f( 93.0f,-3.0f, 0.0f);

              // y-axis

              glVertex3f( 0.0f, -100.0f, 0.0f);
              glVertex3f( 0.0f, 100.0f, 0.0f);

              // y-axis arrow
              glVertex3f( 0.0f, 100.0f, 0.0f);
              glVertex3f( 3.0f, 93.0f, 0.0f);
              glVertex3f( 0.0f, 100.0f, 0.0f);
              glVertex3f( -3.0f, 93.0f, 0.0f);
          }
          glEnd();

此時的效果就是:

此時,我們再來畫一個在(50,20, 0)的點:

Copyright © Linux教程網 All Rights Reserved