glDrawArray没有第二次绘制

时间:2016-01-06 09:14:38

标签: c++ opengl

嗨,所以我基本上已经把我的头发拉出来试图理解这个OpenGL的混乱

我试图在书本,教程中找到答案,甚至试验它

所以基本上我有一个opengl程序,第一次绘制我的两个三角形,但是当我再次尝试重绘第一个三角形时,它似乎没有工作

我不知道我错过了哪些信息,但它没有任何意义

据我所知,一旦VAO和VBO被创建并被限制并缓冲到内存,并且顶点attrib指针设置并启用,一旦我绑定了我想要绘制的vao对象,我喜欢的次数,我只需要这样做

初学者对我有用之后,问题是,一旦我重新绑定另一个vao对象,它似乎没有画出它

我的代码很安静,如果你愿意,我可以把它粘贴在这里,但我认为代码的绘图部分就足够了

这里是

          GLfloat vec[] = {0.0f, 0.0f,
                            1.0f, -1.0f,
                           -1.0f, -1.0f};

          GLfloat vec2[] = {0.0f, 1.0f,
                            1.0f, 0.0f,
                           -1.0f, 0.0f};

   //next step is to upload data to graphics memory

   //generating a buffer from openGL 
   GLuint vbo;
   GLuint vbo2 ; 

   GLuint vao;
   GLuint vao2;

   glGenBuffers(1, &vbo);
   glGenBuffers(1, &vbo2);

   glGenVertexArrays(1, &vao);
   glGenVertexArrays(1, &vao2);

   //to upload the actual data must make the object active by binding it to a target
   glBindBuffer(GL_ARRAY_BUFFER, vbo);

   //upload the data of active object to memory
   glBufferData(GL_ARRAY_BUFFER, sizeof(vec), vec, GL_STATIC_DRAW);

   glBindBuffer(GL_ARRAY_BUFFER, vbo2);

   glBufferData(GL_ARRAY_BUFFER, sizeof(vec2), vec2, GL_STATIC_DRAW);



   //bind and draw

   glBindBuffer(GL_ARRAY_BUFFER, vbo);
   glBindVertexArray(vao);

   glEnableVertexAttribArray(0);
   glVertexAttribPointer(0,2,GL_FLOAT, GL_FALSE, 0, NULL);


   glDrawArrays (GL_TRIANGLES, 0, 3);
   glXSwapBuffers ( dpy, glxWin );

   sleep(3);

   glClear(GL_COLOR_BUFFER_BIT);

   //rendering second triangle 

   glBindBuffer(GL_ARRAY_BUFFER, vbo2);
   glBindVertexArray(vao2);

   glEnableVertexAttribArray(0);
   glVertexAttribPointer(0,2,GL_FLOAT, GL_FALSE, 0, NULL);

   glDrawArrays (GL_TRIANGLES, 0, 3);
   glXSwapBuffers ( dpy, glxWin );

   sleep(3);
   //rendering the first triangle again------where the problem lies!!!
   glClear(GL_COLOR_BUFFER_BIT);

   glBindVertexArray(vao);

   glEnableVertexAttribArray(0);
   glVertexAttribPointer(0,2,GL_FLOAT, GL_FALSE, 0, NULL);


   glDrawArrays (GL_TRIANGLES, 0, 3);
   glXSwapBuffers ( dpy, glxWin );

   sleep(3);

1 个答案:

答案 0 :(得分:0)

您还需要清除深度缓冲区glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

如果你按照教程进行操作,那么你可能已经在它提供的openGL设置样板中启用了深度测试。这是因为更多人会想要使用深度缓冲区而不是。

您也无法在设置过程中致电glEnable(GL_DEPTH_TEST);