OpenGL中glDrawElements无法工作但glDrawArrays正常的问题求助
问题:OpenGL中使用EBO配合glDrawElements无法绘制矩形,glDrawArrays可正常工作
我尝试用OpenGL绘制一个简单矩形,以下是实现的VBA代码:
Public VAO As Long Public VBO As Long Public EBO As Long Public Shader As std_Shader Public Indices(5) As Long Public Positions(11) As Long Public Function RunMain() As Long Call glutInit(0&, "") Call glutInitContextVersion(4, 6) Call glutInitContextProfile(GLUT_CORE_PROFILE Or GLUT_DEBUG) Call glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS) Call glutInitWindowSize(1600, 900) Call glutInitDisplayMode(GLUT_RGBA) Call glutCreateWindow("OpenGL Cube") Call GLStartDebug() Call glEnable(GL_BLEND) Call glEnable(GL_DEPTH_TEST) Call glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) Call glutDisplayFunc(AddressOf DrawLoopFirstTemp) Call glutIdleFunc(AddressOf DrawLoopTemp) Call glutMainLoop End Function Public Sub DrawLoopFirstTemp() Static Initialized As Boolean If Initialized = True Then Exit Sub Initialized = True Set Shader = New std_Shader Call Shader.CreateFromFile(ThisWorkbook.Path & "\Vertex.Shader", ThisWorkbook.Path & "\Fragment.Shader") Call Shader.Bind() Indices(00) = 0: Indices(01) = 1: Indices(02) = 3 Indices(03) = 1: Indices(04) = 2: Indices(05) = 3 Positions(00) = +0.5: Positions(01) = +0.5: Positions(02) = +0.0 ' 0| x, y, z Positions(03) = +0.5: Positions(04) = -0.5: Positions(05) = +0.0 ' 1| x, y, z Positions(06) = -0.5: Positions(07) = -0.5: Positions(08) = +0.0 ' 3| x, y, z Positions(09) = -0.5: Positions(10) = +0.5: Positions(11) = +0.0 ' 4| x, y, z Call glFrontFace(GL_CW) Call glGenVertexArrays(1, VAO) Call glBindVertexArray(VAO) Call glGenBuffers(1, VBO) Call glBindBuffer(GL_ARRAY_BUFFER, VBO) Call glBufferData(GL_ARRAY_BUFFER, 4 * (Ubound(Positions) + 1), VarPtr(Positions(0)), GL_STATIC_DRAW) Call glGenBuffers(1, EBO) Call glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO) Call glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * (Ubound(Indices) + 1), VarPtr(Indices(0)), GL_STATIC_DRAW) Call glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*4, 0) Call glEnableVertexAttribArray(0) End Sub Public Sub DrawLoopTemp() Call glClearColor(0.2!, 0.3!, 0.3!, 1.0!) Call glClear(GL_COLOR_BUFFER_BIT) Call glClear(GL_DEPTH_BUFFER_BIT) Call glUseProgram(Shader.LinkedShader) Call glBindVertexArray(VAO) Call glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO) Call glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0) ' 无法正常工作 Call glDrawArrays(GL_TRIANGLES, 0, 4) ' 可正常工作(除最后一个顶点外) Call glutSwapBuffers() End Sub
着色器代码
顶点着色器:
#version 460 core layout(location = 0) in vec3 aPosition; void main() { gl_Position = vec4(aPosition.x, aPosition.y, aPosition.z, 1.0); }
片段着色器:
#version 460 core out vec4 color; void main() { color = vec4(0.2f, 0.3f, 0.8f, 1.0f); }
着色器已成功编译并链接,调试回调未检测到其他错误。仅使用VBO时一切正常,但使用EBO配合glDrawElements时无法正常绘制,而glDrawArrays可以正常工作(除最后一个顶点外)。我已尝试调整顶点顺序、开启面剔除、检查缓冲区数据、修改数据类型、切换线框模式等多种方案,均无效果。
内容的提问来源于stack exchange,提问作者Almesi
相关产品推荐
相关产品推荐

