# JOGL im OrthoMode und Texturen verfärben sich



## turbojunge (29. Mrz 2011)

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]


----------



## Marco13 (29. Mrz 2011)

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...


----------



## Guest2 (29. Mrz 2011)

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:


```
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_REPLACE)
```

Viele Grüße,
Fancy


----------



## turbojunge (29. Mrz 2011)

Vielen Dank für die beiden Tips!!

Haben beide funktioniert !

GRuß


----------

