我尝试使用lwjgl和OpenGL在屏幕中间绘制一个三角形。我目前的代码如下:
int vertexBuffer = glCreateBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, g_vertex_buffer_data, GL_STATIC_DRAW);
//and initalised FloatBuffer
主循环:
while (glfwWindowShouldClose(windowID) == GL_FALSE) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, vertexBuffer);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
glfwSwapBuffers(windowID);
glfwPollEvents();
}
你能帮帮我吗?
答案 0 :(得分:1)
您误解了glCreateBuffers()
功能。您可以生成ID:
IntBuffer buffer = BufferUtils.createIntBuffer(1);
glCreateBuffers(buffer);
int id = buffer.get(0);
您也可以不带参数调用glCreateBuffers()
,并将返回值用作ID:
int id = glCreateBuffers();
要将数据写入此缓冲区,首先必须将其绑定,这只是告诉OpenGL您要写入绑定的商品。
glBindBuffer(GL_ARRAY_BUFFER, id);
如您所见,您传入生成的ID,以绑定相应的缓冲区。
接下来,您可以写入OpenGL缓冲区,如下所示:
glBufferData(GL_ARRAY_BUFFER, g_vertex_buffer_data, GL_STATIC_DRAW);
这会将g_vertex_buffer_data
的内容发送到GPU上的OpenGL上下文。 g_vertex_buffer_data
包含您的顶点数据(模型数据),您不想创建此java.nio.Buffer的缓冲区,但让OpenGL为GPU缓冲区生成ID,然后发送java的内容。 nio.Buffer到GPU缓冲区。
有关信息,请查看有关顶点缓冲区的LWJGL Wikipage。