0

我正在跟随此处找到的 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渲染得很好。但是第一个三角形根本不渲染。我犯了一个简单的错误吗?

4

1 回答 1

1

在搜索更多示例代码时,我遇到了一个片段,它说您必须“翻转每个缓冲区”。添加

vertexBuffer.flip();
colorBuffer.flip();

就在while循环解决我的问题之前!

于 2013-04-29T03:18:05.470 回答