2017-07-25 129 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);