0

我开始学习有关现代 OpenGL 渲染的教程,并将 VBO 课程中的 c++ 代码更改为使用 LWJGL。我使用以下代码初始化了 VBO:

int vbo = GL15.glGenBuffers();
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);

“缓冲区”初始化为

FloatBuffer buffer = BufferUtils.createFloatBuffer(9);

然后通过填充 {-0.5f, -0.5f, 0, 0.5f, -0.5f, 0, 0, 0.5f, 0}

buffer.put(val)

我的游戏循环如下所示:

GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
GL20.glEnableVertexAttribArray(0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);
GL11.glDrawArrays(GL11.GL_POINTS, 0, 3);
GL20.glDisableVertexAttribArray(0);
Display.update();

但我得到的只是屏幕中央的一个白点。我发现了一个类似的问题(VBO: Array not draw),但该解决方案并没有解决我的问题。我使用的教程是http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.htmlhttp://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html。当我尝试绘制 GL_TRIANGLES 而不是 GL_POINTS 时,屏幕上没有绘制任何内容。

4

2 回答 2

0

用于glTranslate*()设置要绘制内容的位置。它可能会被弃用,但它确实有效。
在这里你可以找到关于它的讨论。
您的代码应如下所示:

glPushMatrix();
glTranslate*();
//画一些东西
glPopMatrix();

于 2013-07-01T06:27:27.297 回答
0

在浪费了几个小时阅读不同的教程之后,我发现我没有 rewind() 我的缓冲区......

GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);

GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);

正如VBO 中所建议的:不需要绘制数组

于 2013-07-01T10:03:16.200 回答