Zeichnung Rechteck in opengl android
Ich versuche zu zeichnen Sie ein Rechteck mit android opengl. Das Rechteck wird sich in einen bunten hintergrund. Nach ausführen des Codes sehe ich einen hintergrund, aber kein Rechteck drin.
public void onDrawFrame(GL10 gl)
{
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glClearColor(0.4f, 0.5f, 0.6f, 0.5f);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
float[] vertices=
{
-1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
};
short[] indices = { 0, 1, 2, 0, 2, 3 };
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
FloatBuffer vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
ShortBuffer indexBuffer = ibb.asShortBuffer();
indexBuffer.put(indices);
indexBuffer.position(0);
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glColor4f(0.5f, 0.3f, 0.3f, 0.7f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,
GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
}
public void onSurfaceChanged(GL10 gl, int width, int height)
{
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f,
(float) width / (float) height,
0.1f, 100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
public void onSurfaceCreated(GL10 gl, EGLConfig arg1)
{
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
was falsch in meinem code? Irgendwelche Vorschläge bitte....
- Sind Sie sicher über die kurvenreiche Reihenfolge der Dreiecke? Sie deaktivieren möchten, culling für Testzwecke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Initialisierung der Puffer in Ihrem onDrawFrame-Methode funktioniert nicht richtig.
Ich schlage vor, Sie erstellen eine grundlegende Rechteck-Klasse mit vertices und Indizes als Felder:
Fügen Sie ein Rechteck-Feld, um Ihre Renderer, und initialisieren Sie es in den Renderer Konstruktor:
aus und rufen Sie den Rechteck der draw-Methode der Renderer der onDrawFrame-Methode:
Folgen die ersten 3 Teile von dieses tutorial für eine Gesamtlösung, wie es getan werden kann.
Ihre Dreiecke sind hinter der vorderen Ebene. Die Kamera ist bei z=0, die in der Nähe von dem Flugzeug ist 0.1 f, und Ihre Dreiecke sind bei z=0.
Entweder zeichnen Sie die Dreiecke weiter entlang der -z-Achse, oder richten Sie eine Kamera mit z > 0.1 f.
Auch so zeichnen Sie ein Rechteck mit GL_TRIANGLES, müssen Sie 6 vertices, nicht 4. Sollten Sie noch etwas sehen, obwohl.