[jogl] ein einfaches Dreieck darstellen

  • Themenstarter Themenstarter the_gregg
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

the_gregg

Gast
hallo Forum-User,

ich habe mit Jogl angefangen und diverse Tutorials gemacht. Da allerdings die Meisten nicht ausführlich genug sind, oder nach kurzer Zeit so komplex werden, dass ich als Anfänger nicht mehr durchblicke (weil z.T. auch nicht erklärt) wollte ich ein ganz einfaches Projekt machen, wo ich nur ein einziges Rechteck dargestellt wird und ich jeden schritt begreife. Es ist mir aber nicht gelungen das Rechteck dargestellt zu bekommen, obwohl der code den ich verwende sehr nahe an dem der Tutorials ist. Wenigstens ein schwarzer leerer Frame mit OpenGL konnte ich hinkriegen.

Hier der Code der Main-Klasse:
Code:
package view;

import model.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import net.java.games.jogl.GLCanvas;
import net.java.games.jogl.GLCapabilities;
import net.java.games.jogl.GLDrawableFactory;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Frame frame = new Frame("Test");
                GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());
		frame.add(canvas);
		frame.setSize(300, 300);
		frame.setResizable(false);
		frame.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e) {
					System.exit(0);
				}
			}	
		);
		canvas.addGLEventListener(new SimpleGLEventListener());
		frame.setVisible(true);
	}
}

Die SimpleGLEventListener-Klasse:
Code:
package model;
import net.java.games.jogl.*;

public class SimpleGLEventListener implements GLEventListener {

	public SimpleGLEventListener() {
		
	}

	public void init(GLDrawable arg0) {
		GL gl = arg0.getGL(); //Grafik-Bibliothek für dieses Canvas erzeugen..
		gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); //Grafikkartenbuffer leeren..
		gl.glLoadIdentity(); //Achsenkreuz an Bildschirm anpassen (x nach links,rechts; y oben,unten; z vorne,hinten)
	
		gl.glTranslatef(-1.5f, 0.0f, 6.0f); //Kamera rumwandern lassen

		gl.glBegin(GL.GL_QUADS); //Rechteck zeichnen
			gl.glVertex3f(-1.0f, 0.5f, 1.0f);
			gl.glVertex3f( 1.0f, 0.5f, 1.0f);
			gl.glVertex3f( 1.0f, 0.5f,-1.0f);
			gl.glVertex3f(-1.0f, 0.5f,-1.0f);
		gl.glEnd();
		
	}

	public void display(GLDrawable arg0) {
		
	}

	public void reshape(GLDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
	
	}

	public void displayChanged(GLDrawable arg0, boolean arg1, boolean arg2) {
	
	}

}

Da ich nicht erwarten kann, dass mir jemand alles neu schreibt oder verbessert, möchte ich fragen, ob mir jemand wenigstens einen Tipp geben kann, was falsch ist, oder wie ich den Fehler lokalisieren könnte.


Danke im Voraus und MfG
the_gregg
 
Als erstes würde ich versuchen, das Dreieck nicht in der Initialisierung zu zeichnen---> Geht nicht so gut 😉

Zweitens benutzt dein Jogl-Code eine ältere Klassen-Bibliothekt Prä-JSR-231.
Lade dir von der Jogl Page ein neues nightly Build und benutze dies.
Es wird sich jetzt am Anfang nicht mehr ändern, als das die Imports anderes lauten und
GLDrawable wird in GLAutoDrawable umbenannt.

Zu genau deinem Beispiel, hab ich ein aktuelles (JSR231) Tut geschrieben
--> zu finden auf meiner Seite www.soulflyhome.com. Kannst ja deine Meinung auch mal dazu ablassen.

MfG
Soulfly
 
hmm,

also ich habe jetzt mal versucht, eine neuere OpenGL-Binding-Vesion zu installieren aber da sagt mir Eclipse (IDE), dass der Import von "javax.media.opengl.GLCanvas" nicht funktioniert (habe den Code aus deinem Tutorial). Die "jogl.dll" habe ich aus dem "jogl-natives-windows-i586.jar" rauskopiert, weil ich die nicht auf der Seite von Sun gefunden habe.

Woran könnte das liegen?
Und wie kann ich die Versionsnummer meines JRS's herausfinden?

mfG the_gregg

PS: wenns funktioniert mach ich mich sofort ans Tutorial (auch das mit dem Fullscreen ist genau das was ich gesucht habe :toll: )
 
Also:

Du brauchst zum einen die jogl.jar:
das ist die Jogl-Java-Bibliothek, sie beinhaltet alle Klassen und muss von Eclipse eingebunden werden (gelinkt im Classpath) um funktionieren zu können. Oder du kopierst sie in folgenden Order deiner JRE /jre-location/lib/ext --> Dann haste auch deine Imports 🙂

Ebenso brauchst du jogl-natives-windows-i586.jar
Dies ist, wie der Name sagt der native (in C-Geschriebene) Teil von Jogl. Diese muss sich in deiner entwicklungs JRE befinden. Also ich hab zwei JREs, eine zum fuschen und die andere für die richtigen Applikationen 😉 Diese Jar musst du entpacken ("alle dlls" nicht nur die jogl.dll) und zwar nach /jre-location/bin --> Dann funktioniert das auch wieder mit dem ausführen!

Ich weiß jetzt nicht was du mit Seite von Sun meinst?! Die Dateien liegen auf der Jogl-Page der Community, die von Sun unterstützt wird --> https://jogl.dev.java.net/

Die Versionsnummer findest du heraus, ich weiß jetzt nicht den Aufruf, in dem du im Programm eine Methode aufrufst und die spuckt dir dann die Version aus. Einfach mal in der Doku suchen.

Viel Erfolg!
MfG
Soulfly
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben