JOGL im OrthoMode und Texturen verfärben sich

turbojunge

Mitglied
Hallo zusammen,

ich möchte eine Anwendung mit Java Jogl schreiben, in der ich Jogl im Ortho Mode verwende.

Nun habe ich ein Bild als Hintergrund und möchte darauf meine OpenGl Objekte zeichnen, eigetnlich nur OpenGL Primitive wie Kreise,Dreiecke, usw....

Sobald ich jedoch ein Dreick (wie in folgendem Code gezeigt) über das Hintergrundbild zeichne, verfärbt sich mein Hintergrundbild in der Farbe des Dreiecks.

Es wäre super, wenn hier jemand einen Tip für mich hätte.

Hier der Code:

[Java]
public void display(GLAutoDrawable drawable) {
// TODO Auto-generated method stub
final GL gl = drawable.getGL();

// Clear screen.
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);






gl.glMatrixMode(GL.GL_PROJECTION); // Select Projection
gl.glPushMatrix(); // Push The Matrix
gl.glLoadIdentity(); // Reset The Matrix
gl.glOrtho(0, 640, 480, 0, -1, 1); // Select Ortho Mode (640x480)
gl.glMatrixMode(GL.GL_MODELVIEW); // Select Modelview Matrix
gl.glPushMatrix(); // Push The Matrix
gl.glLoadIdentity(); // Reset The Matrix


tex.enable ();
tex.bind ();


gl.glBegin(GL.GL_QUADS);

gl.glTexCoord2f(0, 1); // Texture Coordinate ( 0, 1 )
gl.glVertex2f(0, 0); // First Vertex ( 0, 0 )

// Texture Coordinate ( 0, 0 )
gl.glTexCoord2f(0, 0 );
gl.glVertex2f(0, 480); // Second Vertex ( 0, 480 )

// Texture Coordinate ( 1, 0 )
gl.glTexCoord2f(1 , 0 );
gl.glVertex2f(640, 480); // Third Vertex ( 640, 480 )

// Texture Coordinate ( 1, 1 )
gl.glTexCoord2f(1 , 1 );
gl.glVertex2f(640, 0); // Fourth Vertex ( 640, 0 )

gl.glEnd();



tex.disable ();




gl.glBegin(GL.GL_TRIANGLES);
gl.glColor3f(1,0,0);
gl.glVertex2d(100,100);
//gl.glColor3f(1,0,0);
gl.glVertex2d(200,200);
//gl.glColor3f(1,0,0);
gl.glVertex2d(100,200);
gl.glEnd();


}
[/Java]
 
Das gleiche Problem hatte ich gestern auch 😀 Es war nicht akut und nur ein Test, deswegen war's nicht wirklich ein "Problem", aber ... das liegt wohl daran, dass OpenGL im wesentlichen eine "state machine" ist. Wenn man ein mal
gl.glColor3f(1,0,0);
aufruft, dann bleibt die rote Farbe gesetzt - bis man ihm wieder etwas anderes sagt. Wirklich "lösen" mußte ich das dann gestern nicht, aber vermutlich reicht's schon wenn man nach dem Zeichnen der bunten Primitive (bzw. vor dem zeichnen der Textur) einfach
gl.glColor3f(0,0,0);
aufruft. Aber vielleicht hat Fancy noch eine ... "professionellere" Idee...
 
Moin,

"professioneller" ist immer relativ zu dem, was man erreichen möchte. 😉

Entweder tatsächlich die Farbe zurücksetzen (imho sollte es aber gl.glColor3f(1, 1, 1) sein), dann wird der Farbwert des Texel mit dem Farbwert des Fragments gemischt und man erhält eben den Wert des Texel. Oder man schaltet OpenGL in einen Zustand, der direkt die Farbwerte der Texel übernimmt. Das wäre dann:

Java:
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_REPLACE)

Viele Grüße,
Fancy
 

Zurück
Oben