LWJGL AWTGLCanvas Tiefe auf 1 beschränkt

openglfreak

Mitglied
Hallo

Ich beschreib' mein Problem mal so:
Ich hab' ABSOLUT keine ahnung warum ich nichts z > 1 anzeigen kann!

Zum anzeigen benutze ich LWJGL.
Das AWTGLCanvas wird einem Fenster hinzugefügt und angezeigt.
Jede 1/60 sekunde wird
Code:
Canvas3D.repaint()
aufgerufen

Hier der Code für das AWTGLCanvas:
Java:
public class Canvas3D extends AWTGLCanvas implements Renderer {
	private static final long serialVersionUID = 1L;
	
	private List<DrawInfo> infos;
	private List<Renderer> subRenderers;
	
	private boolean inited;
	
	public Canvas3D() throws LWJGLException {
		super();
		infos = new LinkedList<DrawInfo>();
		subRenderers = new LinkedList<Renderer>();
	}

	public void init() {
		createBufferStrategy(1);
		try {
			makeCurrent();
		} catch (LWJGLException e) {
			e.printStackTrace();
			return;
		}
		GL11.glShadeModel(GL11.GL_SMOOTH);
		GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
		GL11.glClearDepth(1.0f);
		GL11.glEnable(GL11.GL_DEPTH_TEST);
		GL11.glDepthFunc(GL11.GL_LEQUAL);
		GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
		GL11.glMatrixMode(GL11.GL_PROJECTION);
		GL11.glLoadIdentity();
		GL11.glOrtho(-2, 2, 2, -2, -1, 1);
		GL11.glMatrixMode(GL11.GL_MODELVIEW);
		GL11.glLoadIdentity();
        try {
			releaseContext();
		} catch (LWJGLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public DrawInfo get(int index) {
		return infos.get(index);
	}

	@Override
	public int add(DrawInfo di) {
		infos.add(di);
		return infos.size() - 1;
	}

	@Override
	public int remove(DrawInfo di) {
		int index = infos.indexOf(di);
		if (index != -1)
			infos.remove(index);
		return index;
	}

	@Override
	public void clear() {
		infos.clear();
	}
	
	public int addSubRenderer(Renderer renderer) {
		int index = subRenderers.indexOf(renderer);
		if (index != -1)
			return index;
		subRenderers.add(renderer);
		return subRenderers.size() - 1;
	}
	
	public Renderer removeSubRenderer(int index) {
		return subRenderers.remove(index);
	}
	
	public int removeSubRenderer(Renderer renderer) {
		int index = subRenderers.indexOf(renderer);
		if (index != -1)
			subRenderers.remove(index);
		return index;
	}

	@Override
	public void render() {
		if (!inited) {
			init();
			inited = true;
		}
		try {
			makeCurrent();
		} catch (LWJGLException e1) {
			e1.printStackTrace();
			return;
		}
		GL11.glLoadIdentity();
		GL11.glPushMatrix();
		for (int i = 0; i < subRenderers.size(); i++)
			subRenderers.get(i).render();
		GL11.glPopMatrix();
		GL11.glPushMatrix();
		for (int i = 0; i < infos.size(); i++)
			try {
				infos.get(i).render();
			} catch (NoSuchMethodException | IllegalArgumentException e) {
				e.printStackTrace();
			}
		GL11.glPopMatrix();
		try {
			releaseContext();
		} catch (LWJGLException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void paintGL() {
		int max = Math.max(getWidth(), getHeight());
		GL11.glViewport(0, 0, max, max);
		GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
		GL11.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
		render();
		try {
			makeCurrent();
			swapBuffers();
		} catch (LWJGLException e) {
			e.printStackTrace();
		}
	}
}
 
Ich rendere 3D Blöcke/Würfel und wenn ich einen Würfel mit z > 1 zeichne, wird dieser nicht angezeigt.
Ich schätze, ich habe beim initialisieren etwas falsch gemacht.
 
Nein hast prinzipell alles richtig gemacht, aber vorraussichtlich den Code kopiert?
Du hast bei glOrtho mit der in der FarClipLane 1 angegeben daher => wird alles dahinter abgeschnitten.
 
Ich habe jetzt zFar auf 100 gesetzt und kann immer noch nichts hinter 1 Zeichnen ???:L
Den Code habe ich aus einem tut kopiert und für LWJGL geändert (überall GL11. vorgeschrieben)
 
Zuletzt bearbeitet:
Hmm ich bin selbst nicht mehr mit OpenGL 1.1 unterwegs und auch schon 1-2 Monate her.

Du solltest normalerweise (wenn die Kamera nicht geändert wurde) entlang der negativen z-Achse schauen, somit near positiv und far größeres negativ z.b. (1,-100).
 

Neue Themen


Zurück
Oben