2016-12-11 10 views
0

Ich versuche, OpenGL in Android zu verstehen, und das ist mein Render und eine Cube-Klasse .. Das Problem ist, dass auf dem Gerät der Würfel nicht angezeigt wird. Kann mir jemand sagen warum? Kann jemand meine Fehler korrigieren? Vielen Dank an alle und sorry für mein EnglischOpenGlES zeichnet nichts

Render:

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) { 

} 
} 

Cube:

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); 
} 

}

+0

Ihre 'onDrawFrame' Methode ist empty? – BDL

+0

Ja, aber zeichnen Vertex nicht in auf zeichnen, sondern auf der Oberfläche erstellt –

Antwort

0

Sie sind ein falscher Puffer als letzten Parameter glDrawElements vorbei. Der Puffer, den Sie dort angeben, sollte Indizierungsinformationen und keine Eckpunktpositionen enthalten. Sie sollten stattdessen glDrawArrays verwenden, da Sie keine indizierte Zeichnung verwenden.

Nicht im Zusammenhang mit dem Problem, aber Sie sollten auch GL_COLOR_ARRAY nach dem Zeichenaufruf deaktivieren.