JOGL VBO,glDrawElements的替代品

时间:2012-09-27 17:19:47

标签: opengl vbo indices

我在渲染期间运行以下代码

if (fUseVBO) {
            gl.glBindBuffer(GL.GL_ARRAY_BUFFER, VBOTexCoords[0]);
            // Set The TexCoord Pointer To The TexCoord Buffer
            gl.glTexCoordPointer(2, GL.GL_FLOAT, 0, 0);
            gl.glBindBuffer(GL.GL_ARRAY_BUFFER, VBOVertices[0]);
            // Set The Vertex Pointer To The Vertex Buffer
            gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
        } else {
            // Specifies the location and data format of an array of vertex
            // coordinates to use when rendering.
            gl.glVertexPointer(3, GL.GL_FLOAT, 0, mVerticesBuffer);
            // Set The Vertex Pointer To Our TexCoord Data
            gl.glTexCoordPointer(2, GL.GL_FLOAT, 0, mTextureBuffer);
        }

        gl.glDrawElements(GL.GL_TRIANGLES, mNumOfIndices,
                        GL.GL_UNSIGNED_SHORT, mIndicesBuffer);

在这种方法中,即使很难,我有纹理坐标和顶点的VBO,每次渲染时我都会传递索引缓冲区。 (我有一个顶点,纹理坐标和一个对象的索引)

我尝试用以下代码替换gl.glDrawElements方法

gl.glDrawArrays(GL.GL_TRIANGLES, 0, vertexCount); 

但它没有正确渲染对象。

如何摆脱glDrawElements?

1 个答案:

答案 0 :(得分:2)

此代码

gl.glDrawArrays(GL.GL_TRIANGLES, 0, vertexCount); 

必须更改为

gl.glDrawArrays(GL.GL_TRIANGLES, 0, mNumOfIndices);

(Dnu_12提供)