# LWJGL Rechteck wird nicht gezeichnet



## shadowlif (15. Dez 2012)

Moin,
versuche grade ein Rechteck mit LWJGL zu zeichnen aber es geht leider nicht. Könnt ihr mir einen Tipp geben ? Hier mein bisheriger Code:

Frame

```
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;


public class Frame {
	
	public Frame() {
		try {
			Display.setDisplayMode(new DisplayMode(680, 420));
			Display.create();
		} catch (LWJGLException e) {
			e.printStackTrace();
		}
		
		// init
		GL11.glMatrixMode(GL11.GL_PROJECTION);
		GL11.glLoadIdentity();
		GL11.glOrtho(0, 680, 0, 420, 1, -1);
		GL11.glMatrixMode(GL11.GL_MODELVIEW);
	}
}
```

Loop

```
import org.lwjgl.opengl.GL11;


public class GameLoop {
	
	public GameLoop() {
		new World(128, 128);
		new Frame();
		while(true) {
				drawTiles();
			try {
				Thread.sleep(35);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	private void drawTiles() {
		if(TileList.tileList != null) {
			for(Tile tile : TileList.tileList) {
				/*
				 * Draw Tile
				 */
				GL11.glBegin(GL11.GL_QUADS);
			    	GL11.glVertex2i(0,0);
			    	GL11.glVertex2i(0+16,0);
			    	GL11.glVertex2i(0+16,0+16);
			    	GL11.glVertex2i(0,0+16);	
		    	GL11.glEnd();
			}
		}
	}
}
```

Mfg.
shadowlif


----------



## TKausL (15. Dez 2012)

Ist die TileList.tileList vieleicht leer?

E: Vll. brauchst du diese beiden Methoden auch:


```
// Clear the screen and depth buffer
	    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);	
 
	    // set the color of the quad (R,G,B,A)
	    GL11.glColor3f(0.5f,0.5f,1.0f);
```


----------



## TheChemist (15. Dez 2012)

Ohne jetzt groß was von 3D-Programmierung zu verstehen, zwei Punkte:
[STRIKE]1. Du erstellst nirgens ein Objekt von GameLoop, also kann auch nichts gemalt werden.[/STRIKE] Okay, das ist Mist, eben gesehen.
2. Eine Endlosschleife im Konstruktor ist sicherliche keine gute Idee. Der Konstruktor ist für den Aufbau und die Initialisierung des Objekts da.

Außerdem würde ich dir raten einen JFrame zu benutzen anstatt des Frames. Ist angenehmer.


----------



## TKausL (15. Dez 2012)

TheChemist hat gesagt.:


> Außerdem würde ich dir raten einen JFrame zu benutzen anstatt des Frames. Ist angenehmer.


LWJGL/OpenGL kann mit JFrame nicht arbeiten


----------



## TheChemist (15. Dez 2012)

TKausL hat gesagt.:


> LWJGL/OpenGL kann mit JFrame nicht arbeiten



Okay, das wusste ich nicht.


----------



## BuddaKaeks (15. Dez 2012)

Du stellst irgendwie nie in deiner Schleife einen Bezug auf die Tiles aus deiner TileList her:

```
private void drawTiles() {
    if(TileList.tileList != null) {
        for(Tile tile : TileList.tileList) { //tile is never used!!!!!
            /*
             * Draw Tile
             */
            GL11.glBegin(GL11.GL_QUADS);
                GL11.glVertex2i(0,0);
                GL11.glVertex2i(0+16,0);
                GL11.glVertex2i(0+16,0+16);
                GL11.glVertex2i(0,0+16);    
            GL11.glEnd();
        }
    }
}
```

zudem würde ich

```
GL11.glOrtho(0, 680, 0, 420, 1, -1);
```
lieber als

```
GL11.glOrtho(0, 680, 420,0 , 1, -1);
```
schreiben.



MfG BuddaKaeks


----------



## shadowlif (15. Dez 2012)

@TKausL
Nein die Liste ist nicht leer. Und die Methoden bringen auch nichts


@TheChemist
Zu 2: Ja das habe ich nur zum Test schnell gemacht 

@BuddaKaeks
Ja das weiß ich, ich hatte statt 

```
GL11.glBegin(GL11.GL_QUADS);
                GL11.glVertex2i(0,0);
                GL11.glVertex2i(0+16,0);
                GL11.glVertex2i(0+16,0+16);
                GL11.glVertex2i(0,0+16);    
            GL11.glEnd();
```

dies:

```
GL11.glBegin(GL11.GL_QUADS);
	    	GL11.glVertex2f(tile.getX(),tile.getY());
	    	GL11.glVertex2f(tile.getX()+16,tile.getY());
	    	GL11.glVertex2f(tile.getX()+16,tile.getY()+16);
	    	GL11.glVertex2f(tile.getX(),tile.getY()+16);	
	    GL11.glEnd();
```
aber da wurde auch nichts gezeichnet.

EDIT:
Problem gefunden. Habe vergessen 
	
	
	
	





```
Display.sync(60);
			Display.update();
```
in der while Schleife reinzupackn

MfG.
shadowlif


----------

