glDrawArray第二次未绘制
glDrawArray not drawing the second time
嗨,所以我基本上一直在努力理解OpenGL混淆的
我试着在书籍、教程中找到答案,甚至尝试使用
所以基本上,我有一个opengl程序,可以第一次绘制我的两个三角形,但是当我再次尝试重新绘制第一个三角形时,它似乎不起作用
我不知道我遗漏了什么信息,但没有任何意义
据我所知,一旦VAO和VBO被创建、绑定并缓冲到内存,顶点属性指针被设置并启用,一旦我绑定了我想画的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);
您还需要清除深度缓冲区glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
如果你遵循教程,那么你可能已经在它提供的openGL设置样板中启用了深度测试。这是因为更多的人想要使用深度缓冲区。
在设置过程中也不能调用glEnable(GL_DEPTH_TEST);
。
相关文章:
- 如何从给定字符串中删除第二次和第三次出现的$
- getopt_long_only第二次调用时返回 -1
- 读取文件在第二次调用时返回INVALID_HANDLE
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 我正在尝试创建一个 C++ 贪吃蛇游戏,但我似乎无法绘制第二个高度边框,我该如何解决这个问题?
- 解释为什么第二次分配会改变性能
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- 如何找到数组中值倒数第二次出现的索引
- arm_data在第二次运行我的程序时中止失败,然后
- Java 套接字读取在第二次读取时返回奇怪字符
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- 提升 Asio SSL 无法第二次接收数据(第一次确定)
- CUDA 内核在第二次运行时运行得更快 - 为什么?
- 第二次调用 PyObject_CallObject() 失败
- 在不同位置绘制多次glbatch
- 第二次运行C++时无法编译
- 第二次创建命令缓冲器时,在VKCMDDrawIndex中进行了segfault
- 我的C 程序第二次运行时首先编写文件内容
- glDrawArray第二次未绘制