2017-07-25 134 views
-2

我想用glDrawArrays()函數在opengl中繪製一個三角形。 以下是我的代碼: .cpp文件:用glDrawArray函數繪製三角形

 void linedr2::initializeGL() 
    { 
      glClearColor(0, 0, 0, 1.0); 
      glMatrixMode(GL_PROJECTION); 
      glLoadIdentity(); 
      glOrtho(-10,10,-10,10,1,10); 

      vertices[0].x = 10; 
      vertices[0].y = 5; 

      // Vertex 2 
      vertices[1].x = -10; 
      vertices[1].y = 3; 

       // Vertex 3 
      vertices[2].x = 5; 
     vertices[2].y = -5; 

     } 

    void linedr2::paintGL() 
    { 
       int num_indices = 2; 
      glEnableClientState(GL_VERTEX_ARRAY); 

       glVertexPointer(2, GL_FLOAT, 0, vertices); 
       glDrawArrays(GL_TRIANGLES, 0, num_indices); 
       glDisableClientState(GL_VERTEX_ARRAY); 


     } 

.header文件:

  #include <QWidget> 
     #include <QOpenGLWidget> 
     #include <gl/GLU.h> 
     #include <gl/GL.h> 

     class linedr2: public QOpenGLWidget 
     { 
     public: 
     linedr2(QWidget *parent = 0); 
     ~linedr2(); 

     struct vertex 
    { 
     GLfloat x, y; //z; 
    }; 
     vertex *vertices = new vertex[2]; 

     protected: 
      void initializeGL(); 
     void paintGL(); 
     void resizeGL(int w, int h); 


     }; 

有了這個代碼,我只是得到一個空白窗口。沒有點被繪製。我做錯了什麼?我的glDrawArray函數有什麼不對嗎?

+1

你的頂點數組只有兩個項目'頂點頂點* =新的頂點[2];'和借鑑,只有兩個頂點'詮釋num_indices = 2;'。嘗試改變爲'3' – ikleschenkov

+0

哦!那是一個編輯錯誤。換了之後,我也得到了同樣的結果。 – Yashu

回答

0

當你不指定頂點的z分量時,我不知道發生了什麼。

但有一點是肯定

glOrtho(-10,10,-10,10,1,10); 

將顯示箱體內部屬於一切。 如果你的z分量是0,它不會出現。

試圖通過類似替換它:

glOrtho(-10,10,-10,10,-1,10);