Hallo liebes java-forum.
Ich habe folgendes Problem :
Meine App nutz eine glsurface und dort habe ich als erstes 2 Dreiecke platziert, die auch bewegt werden können, stellen vorerst die Spielfiguren dar.
Nun wollte ich dynamisch veränderbaren Text einbauen, um FPS-counter, Spielernamen, lebenspunkte etc darzustellen.
Ich arbeite immer mit einem Auge auf dieses Tutorial :
link zum Tutorial auf androidpit.de
Ein paar Tests haben jetzt ergeben dass ich nicht Text und Dreiecke gleichzeitig rendern kann.
Entweder Text, oder Dreiecke, aber beides stört sich so sehr, dass ich gar nichts von beidem sehe, sondern nur einen schwarzen Bildschirm.
Hauptproblem (soweit ich das einschätzen kann) ist, dass ich nicht wirklich viel von diesen Befehlen hier verstehe :
Ich habe hier mal etwas Code für euch :
in Setup() definier ich den Text:
In der MainLoopIteration() (wird jedes Frame aufgerufen) passiert folgendes:
hier der Code von DrawPlayer1:
Problem äußert sich wie folgt, wenn ich drawPlayer aufrufe(also nicht auskommentiere) und den Text-code auch drin lasse, dann sehe ich ca. 1 Frame die Dreiecke, nicht aber den Text. Danach ist alles schwarz. Keine Fehlermeldung, kein Crash, keine Daten in Log-cat.
Ich schätze einfach, dass sowas wie
einfach etwas verstellt, sodass die Dreiecke nicht mehr sichtbar werden. und gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); macht vllt das gleiche für den Text unmöglich...
Aber ist nur ne wage vermutung...
Ich habe den draw-Aufruf für Player schon an verschiedene Stellen gesetzt, hinter den Text oder mitten rein, überall das selbe Resultat, außer wenns ganz unten ist, dann wars von anfang an
Ich kann ganz gut Programmieren, aber in Android bin ich relativ neu und mit openGL in android arbeite ich jetzt zum aller ersten mal... Ich komme ja prinzipiell gut voran, nur macht mir diese simple Aufgabe "zeichne einen Text auf die Bühne" so große Probleme... Finde unglaublich aufwending, bin mit Flash-actionscript aufgewachsen, da ging sowas in 2 zeilen... aber ist auch ne grafische Scriptsprache und recht unperformant... lassen wir das.
Kann mir einer Helfen ? Erklärungen zu den gl.gl.... einstellungen wären bestimmt hilfreich, vielleicht bin ich auch völlig auf dem Holzweg...
Ich habe folgendes Problem :
Meine App nutz eine glsurface und dort habe ich als erstes 2 Dreiecke platziert, die auch bewegt werden können, stellen vorerst die Spielfiguren dar.
Nun wollte ich dynamisch veränderbaren Text einbauen, um FPS-counter, Spielernamen, lebenspunkte etc darzustellen.
Ich arbeite immer mit einem Auge auf dieses Tutorial :
link zum Tutorial auf androidpit.de
Ein paar Tests haben jetzt ergeben dass ich nicht Text und Dreiecke gleichzeitig rendern kann.
Entweder Text, oder Dreiecke, aber beides stört sich so sehr, dass ich gar nichts von beidem sehe, sondern nur einen schwarzen Bildschirm.
Hauptproblem (soweit ich das einschätzen kann) ist, dass ich nicht wirklich viel von diesen Befehlen hier verstehe :
Java:
gl.glMatrixMode( GL10.GL_MODELVIEW );
gl.glLoadIdentity();
gl.glTranslatef( 100, 100, 0
gl.glEnable( GL10.GL_TEXTURE_2D );
gl.glEnable( GL10.GL_BLEND );
gl.glBlendFunc( GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA );
Ich habe hier mal etwas Code für euch :
in Setup() definier ich den Text:
Java:
font = new Font( gl, activity.getAssets(), "arial.ttf", 16, FontStyle.Plain );
text = font.newText( gl );
text.setText( "This is a test string!!" );
In der MainLoopIteration() (wird jedes Frame aufgerufen) passiert folgendes:
Java:
gl.glViewport(0, 0, activity.getViewportWidth(),activity.getViewportHeight());
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
updateVerticesPlayer1(); // aktualisiert die Koordinaten der Dreiecke
updateVerticesPlayer2(); // aktualisiert die Koordinaten der Dreiecke
drawPlayer1(activity, gl); // zeichnet Spieler1, code poste ich weiter unten
drawPlayer2(activity, gl); // zeichnet Spieler2, code ist wie bei 1 nur andere Farbe...
// Ab hier beginnt der Code für den Text, der auch funktioniert,
// wenn ich drawPlayer [U]nicht[/U] aufrufe.
gl.glMatrixMode( GL10.GL_PROJECTION );
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, 0, activity.getViewportWidth(), 0, activity.getViewportHeight() );
gl.glMatrixMode( GL10.GL_MODELVIEW );
gl.glLoadIdentity();
gl.glTranslatef( 100, 100, 0 );
gl.glEnable( GL10.GL_TEXTURE_2D );
gl.glEnable( GL10.GL_BLEND );
gl.glBlendFunc( GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA );
text.render();
gl.glDisable( GL10.GL_TEXTURE_2D );
gl.glDisable( GL10.GL_BLEND );
hier der Code von DrawPlayer1:
Java:
private void drawPlayer1(GameActivity activity, GL10 gl) {
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, verticesPlayer1);
gl.glColor4f(1, 0, 1, 1);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
gl.glLoadIdentity();
}
Problem äußert sich wie folgt, wenn ich drawPlayer aufrufe(also nicht auskommentiere) und den Text-code auch drin lasse, dann sehe ich ca. 1 Frame die Dreiecke, nicht aber den Text. Danach ist alles schwarz. Keine Fehlermeldung, kein Crash, keine Daten in Log-cat.
Ich schätze einfach, dass sowas wie
Java:
gl.glMatrixMode( GL10.GL_PROJECTION );
Aber ist nur ne wage vermutung...
Ich habe den draw-Aufruf für Player schon an verschiedene Stellen gesetzt, hinter den Text oder mitten rein, überall das selbe Resultat, außer wenns ganz unten ist, dann wars von anfang an
Ich kann ganz gut Programmieren, aber in Android bin ich relativ neu und mit openGL in android arbeite ich jetzt zum aller ersten mal... Ich komme ja prinzipiell gut voran, nur macht mir diese simple Aufgabe "zeichne einen Text auf die Bühne" so große Probleme... Finde unglaublich aufwending, bin mit Flash-actionscript aufgewachsen, da ging sowas in 2 zeilen... aber ist auch ne grafische Scriptsprache und recht unperformant... lassen wir das.
Kann mir einer Helfen ? Erklärungen zu den gl.gl.... einstellungen wären bestimmt hilfreich, vielleicht bin ich auch völlig auf dem Holzweg...