我开始学习有关现代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.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 drawing),但解决方案并没有解决我的问题。我使用的教程是http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.html和http://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html.当我尝试绘制GL_TRIANGLES而不是GL_POINTS时,屏幕上没有绘制任何内容。
使用glTranslate*()
设置要绘制内容的位置。它可能有点过时,但它有效
在这里你可以找到关于它的讨论。
您的代码应该如下所示:
glPushMatrix()
glTranslate*()
//画一些东西
glPopMatrix();
在浪费了几个小时阅读不同的教程后,我发现我没有倒带()缓冲区。。。
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
和
GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
如VBO中所建议的:不需要绘制数组。