我正在关注找到here的OpenGL教程。我现在正在第2章,它正在讨论使用glArrayElement
渲染对象的优势。目前,我的代码如下:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
double vertices[] = {100, 200, 0, 200, 100, 0, 100, 100, 0};
double colors[] = {1, .5, .8, .3, .5, .8, .3, .5, .8};
DoubleBuffer vertexBuffer = BufferUtils.createDoubleBuffer(9).put(vertices);
DoubleBuffer colorBuffer = BufferUtils.createDoubleBuffer(9).put(colors);
glVertexPointer(3, 0, vertexBuffer);
glColorPointer(3, 0, colorBuffer);
while(!Display.isCloseRequested()) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glArrayElement(0);
glArrayElement(1);
glArrayElement(2);
glVertex3d(300, 200, 0);
glVertex3d(400, 100, 0);
glVertex3d(300, 100, 0);
glEnd();
//Display.sync(60);
Display.update();
}
通过调用glVertex3d
显式定义的第二个三角形可以正常显示。 Bu第一个三角形根本不渲染。我犯了一个简单的错误吗?
答案 0 :(得分:1)
在搜索更多示例代码时,我遇到了一个片段,说你必须“翻转每个缓冲区”。添加
vertexBuffer.flip();
colorBuffer.flip();
在while
循环解决了我的问题之前!