2015-02-06 109 views
1

我想在OpenGL ES 2.0中制作一个六边形,但是我的程序只会查看右下角的一半。 我在代码中找不到错误。任何人都可以看到有什么不对?openGL ES 2.0六角形

我的顶点和索引:

private float vertices[] = { 
    0.0f, 0.0f, 0.0f, // center 
    0.5f, 0.0f, 0.0f, // right 
    0.25f, 0.433f, 0.0f, // top right 
-0.25f, 0.433f, 0.0f, // top left 
-0.5f, 0.0f, 0.0f, // left 
-0.25f, -0.433f, 0.0f, // bottom left 
    0.25f, -0.433f, 0.0f // bottom right 
}; 

private final short drawOrder[] = {0,1,2,2,3,0,0,3,4,4,5,0,0,5,6,6,1,0}; 

我的缓冲区:

ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4); 
    bb.order(ByteOrder.nativeOrder()); 
    vertexBuffer = bb.asFloatBuffer(); 
    vertexBuffer.put(vertices); 
    vertexBuffer.position(0); 

    ByteBuffer dlb = ByteBuffer.allocateDirect(drawOrder.length*2); 
    dlb.order(ByteOrder.nativeOrder()); 
    drawListBuffer = bb.asShortBuffer(); 
    drawListBuffer.put(drawOrder); 
    drawListBuffer.position(0); 

我的绘制方法:

public void draw(float[] mvpMatrix){ 
    GLES20.glUseProgram(shaderProgram); 

    positionHandle = GLES20.glGetAttribLocation(shaderProgram,"vPosition"); 
    GLES20.glEnableVertexAttribArray(positionHandle); 

    GLES20.glVertexAttribPointer(positionHandle,3,GLES20.GL_FLOAT,false,12,vertexBuffer); 

    colorHandle = GLES20.glGetUniformLocation(shaderProgram,"vColor"); 

    mMVPMatrixHandle = GLES20.glGetUniformLocation(shaderProgram,"uMVPMatrix"); 


    GLES20.glUniformMatrix4fv(mMVPMatrixHandle,1,false,mvpMatrix,0); 

    GLES20.glUniform4fv(colorHandle,1,color,0); 
    GLES20.glDrawElements(GLES20.GL_TRIANGLES, drawOrder.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer); 
    GLES20.glDisableVertexAttribArray(positionHandle); 
} 

回答

0

这是一个简单的拼写错误:

drawListBuffer = bb.asShortBuffer(); 

应该是:

drawListBuffer = dlb.asShortBuffer(); 

您是在书写你的指数你的顶点数组的前半部分。

+0

谢谢!这真的帮助了我。 – Pesk92 2015-02-06 09:30:47