LWJGL3 可正常清空颜色缓冲但无法渲染三角形问题求助
问题原因
1. 绘制函数参数顺序错误
Renderer类的render方法里glDrawArrays的参数传反了,该函数的参数定义为:
glDrawArrays(int mode, int first, int count)
- 第二个参数是顶点起始索引,你的场景应传0
- 第三个参数是要绘制的顶点总数,你的场景应传
model.getVertexCount()
你当前代码写的是GL11.glDrawArrays(GL11.GL_TRIANGLES,model.getVertexCount(),0);,相当于从索引3的位置开始绘制0个顶点,自然没有任何渲染结果。
修复后代码:
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, model.getVertexCount());
2. 缺少核心模式要求的着色器程序
你使用的是OpenGL 3.2核心模式,核心模式完全移除了固定渲染管线,必须自行编写并绑定顶点着色器、片段着色器才能正常渲染图形,你当前代码没有任何着色器相关逻辑,这也是无法渲染出图形的核心原因。
你需要补充以下逻辑:
- 编写顶点着色器,接收顶点位置输入,输出裁剪空间坐标
- 编写片段着色器,输出三角形的颜色值
- 编译链接着色器为着色器程序,渲染时绑定激活该程序
临时验证方案
如果你想快速验证顶点数据逻辑是否正常,可以先把窗口配置里的核心模式改成兼容模式,暂时使用固定管线测试:
修改Window类里的窗口配置代码,把:
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_PROFILE,GLFW.GLFW_OPENGL_CORE_PROFILE);
改成:
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_PROFILE,GLFW.GLFW_OPENGL_COMPAT_PROFILE);
先修复glDrawArrays的参数错误后,就能正常看到三角形渲染结果,后续再补充着色器逻辑即可。
内容的提问来源于stack exchange,提问作者user8380672
相关产品推荐
相关产品推荐

