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);
}
}
Ihre 'onDrawFrame' Methode ist empty? – BDL
Ja, aber zeichnen Vertex nicht in auf zeichnen, sondern auf der Oberfläche erstellt –