嗨,所以我基本上已经把我的头发拉出来试图理解这个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);
答案 0 :(得分:0)
您还需要清除深度缓冲区glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
如果你按照教程进行操作,那么你可能已经在它提供的openGL设置样板中启用了深度测试。这是因为更多人会想要使用深度缓冲区而不是。
您也无法在设置过程中致电glEnable(GL_DEPTH_TEST);
。