glDrawElements渲染元素变形

时间:2014-03-27 16:57:05

标签: java android opengl-es vertex-buffer

到目前为止,我尝试使用顶点缓冲区和索引缓冲区渲染网格物体。

使用带数据顺序的打包缓冲区:PosX,PosY,PosZ,NormX,NormY,NormZ,TexX,TexY

但是当谈到渲染像三角形或平面这样的低多边形模型时,渲染和立方体渲染并不奇怪(三角形变形并从各个点绘制:D)。

我认为问题在于GLES正在以糟糕的STRIDE移动。我仔细检查了进入vbo和ibo的数据顺序。

STRIDE = 8;
POSITION_DATA_SIZE = 3;
BYTES_PER_FLOAT = 4;
BYTES_PER_SHORT = 2;
elementsCount = 6; // When drawing plane
if (vbos[0] > 0 && ibos[0] > 0) {

        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbos[0]);


        vbo.position(0);
        ibo.position(0);

        // Bind Attributes
        GLES20.glVertexAttribPointer(getParamHandle("a_Position"),     

        // Position data and offset in one stride
        BufferData.POSITION_DATA_SIZE, GLES20.GL_FLOAT, false,
                BufferData.STRIDE, 0);


        GLES20.glEnableVertexAttribArray(getParamHandle("a_Position"));

        // Draw
        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, ibos[0]);

        GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP, elementsCount, 
        GLES20.GL_UNSIGNED_SHORT, 0);

        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
    }

0 个答案:

没有答案