Java LWJGL不';我什么也不做
我正在尝试学习如何使用LWJGL3,我刚刚进入一个状态,我想渲染一些东西(现在是一个测试四边形)。我有一个表示网格的类,我在其中设置了带有顶点、颜色和索引缓冲区的VAO,另一个对象随后获取网格实例,检索其VAO ID并尝试渲染它 我的问题是,无论我尝试什么,都不会在窗口中渲染任何内容。我可以通过glClearColor()方法更改背景颜色,但四元组从未显示 VAO设置:Java LWJGL不';我什么也不做,java,opengl,lwjgl,Java,Opengl,Lwjgl,我正在尝试学习如何使用LWJGL3,我刚刚进入一个状态,我想渲染一些东西(现在是一个测试四边形)。我有一个表示网格的类,我在其中设置了带有顶点、颜色和索引缓冲区的VAO,另一个对象随后获取网格实例,检索其VAO ID并尝试渲染它 我的问题是,无论我尝试什么,都不会在窗口中渲染任何内容。我可以通过glClearColor()方法更改背景颜色,但四元组从未显示 VAO设置: vertexCount = indices.length; vaoID = glGenVertexArrays(); glB
vertexCount = indices.length;
vaoID = glGenVertexArrays();
glBindVertexArray(vaoID);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
//Vertices
FloatBuffer verticesBuffer = BufferUtils.createFloatBuffer(positions.length);
verticesBuffer.put(positions).flip();
vboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, verticesBuffer, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * 4, 0);
//Colours
FloatBuffer colorsBuffer = BufferUtils.createFloatBuffer(colors.length);
colorsBuffer.put(colors).flip();
colVboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, colVboID);
glBufferData(GL_ARRAY_BUFFER, colorsBuffer, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, false, 3 * 4, 0);
//Indices
IntBuffer indicesBuffer = BufferUtils.createIntBuffer(indices.length);
indicesBuffer.put(indices).flip();
idxVboID = glGenBuffers();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, idxVboID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW);
//Unbind
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
渲染代码:
//Bind the shader
shaderProgram.bind();
//Bind the VAO
glBindVertexArray(mesh.getVaoID());
//Draw
glDrawElements(GL_TRIANGLES, mesh.getVertexCount(), GL_UNSIGNED_INT, 0);
//Restore
glBindVertexArray(0);
shaderProgram.unbind();
顶点着色器:
#version 330
layout (location=0) in vec3 pos;
layout (location=1) in vec3 inColor;
out vec3 exColor;
void main()
{
gl_Position = vec4(pos, 1.0);
exColor = inColor;
}
片段着色器:
#version 330
in vec3 exColor;
out vec4 fragColor;
void main()
{
fragColor = vec4(exColor, 1.0);
}
我做错了什么?问题不在显示的代码部分,而是在我从一本书中复制的主循环中,没有仔细思考它的作用。我在
glfwSwapBuffers
调用之前完成了一个glClear
调用,它在显示缓冲区之前清除了缓冲区
今天的教训:不要只是照本宣科,要仔细想想你在做什么
(感谢LWJGL formus的人们帮助我发现了这个错误)问题不在所显示的代码部分,而是在我从一本书中复制的主循环中,没有仔细思考它的作用。我在
glfwSwapBuffers
调用之前完成了一个glClear
调用,它在显示缓冲区之前清除了缓冲区
今天的教训:不要只是照本宣科,要仔细想想你在做什么
(感谢LWJGL formus的人员帮助我发现了这个错误)您是否启用了
glEnableClientState(GL11.GL\u VERTEX\u ARRAY)代码>一开始?一个明显的问题是,您从未在colorsBuffer
@NoRelect中存储任何数据:此函数在核心配置文件中被替换为GlenableVertexAttributeArray
@RetoKoradi,这就是为什么我不应该复制代码的粘贴部分。但即使修复了它,它仍然不会渲染任何东西。四边形的坐标是多少?您是否启用了glEnableClientState(GL11.GL\u VERTEX\u ARRAY)代码>一开始?一个明显的问题是,您从未在colorsBuffer
@NoRelect中存储任何数据:此函数在核心配置文件中被替换为GlenableVertexAttributeArray
@RetoKoradi,这就是为什么我不应该复制代码的粘贴部分。但即使修复了它,它仍然不会渲染任何东西。四边形的坐标是多少?