LWJGL Rechteck wird nicht gezeichnet

shadowlif

Mitglied
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
Java:
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
Java:
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
 
Ist die TileList.tileList vieleicht leer?

E: Vll. brauchst du diese beiden Methoden auch:

Java:
// 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);
 
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.
 
Du stellst irgendwie nie in deiner Schleife einen Bezug auf die Tiles aus deiner TileList her:
Java:
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
Code:
GL11.glOrtho(0, 680, 0, 420, 1, -1);
lieber als
Code:
GL11.glOrtho(0, 680, 420,0 , 1, -1);
schreiben.



MfG BuddaKaeks
 
@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
Java:
            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:
Java:
		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
Java:
			Display.sync(60);
			Display.update();
in der while Schleife reinzupackn

MfG.
shadowlif
 
Zuletzt bearbeitet:

Zurück
Oben