OpenGlES不会绘制任何东西

时间:2016-12-11 10:25:52

标签: android opengl-es

我试图了解android中的opengl,这是我的渲染和一个立方体类..问题是在设备上多维数据集没有显示。谁能告诉我为什么?谁能纠正我的错误?感谢所有人,对不起我的英语

渲染:

public class Prova implements GLSurfaceView.Renderer {

int wi,he;
public Prova(int wid,int hei){
    this.wi=wid;
    this.he=hei;
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glViewport(0,0,wi,he);
    gl.glClearColor(255,255,255,0);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();

    Cube cube= new Cube(gl);
    cube.draw(gl);

}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {

}

@Override
public void onDrawFrame(GL10 gl) {

}
}

立方数:

public class Cube
{

private ByteBuffer byteBuffer;
private FloatBuffer floatBuffer;
private FloatBuffer colorBuffer;

float[] buffer={
        0.5f,0.5f,0f,
        -0.5f,0.5f,0f,
        0.5f,-0.5f,0f,
        -0.5f,-0.5f,0f,

        0.5f,0.5f,-1f,
        -0.5f,0.5f,-1f,
        0.5f,-0.5f,-1f,
        -0.5f,-0.5f,-1f

};

float[] color={
        1f,0f,0f,0f,
        1f,0f,0f,0f,
        1f,0f,0f,0f,
        1f,0f,0f,0f,

        1f,0f,0f,0f,
        1f,0f,0f,0f,
        1f,0f,0f,0f,
        1f,0f,0f,0f,
};


public Cube(GL10 gl10)
{



    byteBuffer=ByteBuffer.allocateDirect(4*buffer.length);
    byteBuffer.order(ByteOrder.nativeOrder());
    floatBuffer= byteBuffer.asFloatBuffer();
    floatBuffer.put(buffer);
    floatBuffer.position(0);

    byteBuffer=ByteBuffer.allocateDirect(4*color.length);
    byteBuffer.order(ByteOrder.nativeOrder());
    colorBuffer= byteBuffer.asFloatBuffer();
    colorBuffer.put(color);
    colorBuffer.position(0);

}

public void draw(GL10 gl10)
{
    gl10.glVertexPointer(3, GL10.GL_FLOAT,0,floatBuffer);
    gl10.glColorPointer(4,GL10.GL_FLOAT,0,colorBuffer);


    gl10.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl10.glEnableClientState(GL10.GL_COLOR_ARRAY);


    gl10.glDrawElements(GL10.GL_TRIANGLE_STRIP,36, GL10.GL_UNSIGNED_BYTE,floatBuffer);

    gl10.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

}

1 个答案:

答案 0 :(得分:0)

您将错误的缓冲区作为最后一个参数传递给glDrawElements。您在其中指定的缓冲区应包含索引信息而不是顶点位置。您应该使用glDrawArrays,因为您没有使用索引绘图。

与问题无关,但您也应该在绘制调用后禁用GL_COLOR_ARRAY