LWJGL VBO内容总是被绘制到屏幕中心(0,0,0)

时间:2013-06-30 20:47:23

标签: java opengl lwjgl vbo opengl-2.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);

“buffer”初始化为

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 drawn),但解决方案并没有解决我的问题。 我使用的教程是http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.htmlhttp://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html。当我尝试绘制GL_TRIANGLES而不是GL_POINTS时,屏幕上不会绘制任何内容。

2 个答案:

答案 0 :(得分:0)

使用glTranslate*()设置您想要绘制内容的位置。可以对它进行排序,但它确实有效 Here你可以找到关于它的讨论 您的代码应该采用以下方式:

  

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

答案 1 :(得分:0)

在浪费时间阅读不同的教程后,我发现我没有倒回()我的缓冲区......

GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);

GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);

正如VBO: Array not drawn中所建议的那样。