LWJGL 不渲染任何东西

Posted

技术标签:

【中文标题】LWJGL 不渲染任何东西【英文标题】:LWJGL doesn't render anything 【发布时间】:2016-07-03 18:51:07 【问题描述】:

我正在尝试学习如何使用 LWJGL3,但我刚刚达到了我想要渲染某些东西的状态(现在是一个测试四边形)。我有一个表示网格的类,我在其中使用顶点、颜色和索引缓冲区设置 VAO,稍后另一个对象获取网格实例,检索其 VAO ID 并尝试渲染它。

我遇到的问题是,无论我尝试什么,窗口中都没有呈现任何内容。我可以通过 glClearColor() 方法更改背景颜色,但四边形永远不会出现。

VAO 设置:

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);

我做错了什么?

【问题讨论】:

你是否一开始就启用了glEnableClientState(GL11.GL_VERTEX_ARRAY); 一个明显的问题是您永远不会在colorsBuffer 中存储任何数据。 @NoRelect:该函数在 Core Profile 中被替换为 glEnableVertexAttribArray @RetoKoradi 这就是为什么我不应该复制粘贴部分代码的原因。但即使修复它,它仍然不会渲染任何东西。 四边形的坐标是多少? 【参考方案1】:

问题不在于显示的代码部分,而在于我从书中复制的主循环,而没有仔细考虑它做了什么。我在glfwSwapBuffers 调用之前结束了glClear 调用,它在显示之前清除了缓冲区。

今天的一课:不要只是从书中抄袭,要彻底思考你在做什么

(感谢 LWJGL 表单的人帮助我发现这个错误)

【讨论】:

以上是关于LWJGL 不渲染任何东西的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI Map 不渲染任何东西

glDrawElements 不绘制任何东西

Bresenham 线抽屉在渲染任何东西之前在某个循环后崩溃? [关闭]

是否可以使用 LWJGL 以无头模式渲染到 FBO?

JOGL 没有渲染任何东西

LWJGL glRotatef 使用多轴