我尝试使用LWJGL在屏幕上渲染一个简单的网格,但 OpenGL 决定什么都不做。:(
所以我有一个创建VBO的网格类。我可以添加一些应该在屏幕上绘制的顶点。
public class Mesh {
private int vbo;
private int size = 0;
public Mesh() {
vbo = glGenBuffers();
}
public void addVertices(Vertex[] vertices) {
size = vertices.length;
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, Util.createFlippedBuffer(vertices), GL_STATIC_DRAW);
}
public void draw() {
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0);
glDrawArrays(GL_TRIANGLES, 0, size);
glDisableVertexAttribArray(0);
}
}
这是我向网格添加顶点的方法:
mesh = new Mesh();
Vertex[] vertices = new Vertex[] { new Vertex(new Vector3f(-1, -1, 0)),
new Vertex(new Vector3f(-1, 1, 0)),
new Vertex(new Vector3f(0, 1, 0)) };
mesh.addVertices(vertices);
我很确定我以正确的(顺时针)顺序添加了它们。
还有我的 OpenGL 设置:
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glFrontFace(GL_CW);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
调用glGetError()不会返回错误 (0)。
编辑:
好吧,我发现 Mac 在 OpenGL 方面有点奇怪。我需要将 VAO 与 VBO 一起使用。现在它工作正常。不管怎么说,还是要谢谢你!