Dodanie obsługi OpenGL/3D za pomocą JOGL jest proste :) Wystarczy utworzyć obiekt GLCanvas, na którym wszystko jest rysowane, a następnie dodać GLEventListener. Z GLEventListener interesują nas głównie metody init, display i reshape.
init- wywoływane przy starcie programudisplay- tutaj rysujemy naszego Dooma IV ;)reshape- wywoływane przy starcie programu, oraz gdy zmieni się rozmiar okna
Przykładowy program
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Main extends JFrame implements GLEventListener {
Main() {
super("OpenGL Test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
GLCanvas canvas = new GLCanvas();
canvas.addGLEventListener(this);
add(canvas);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Main();
}
} );
}
// GLEventListener
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
// narysuj trójkąt
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor3f(1.0f, 0.0f, 0.0f); // r
gl.glVertex2f(0.0f, 1.0f);
gl.glColor3f(0.0f, 1.0f, 0.0f); // g
gl.glVertex2f(-1.0f, -1.0f);
gl.glColor3f(0.0f, 0.0f, 1.0f); // b
gl.glVertex2f(1.0f, -1.0f);
gl.glEnd();
gl.glFlush();
}
public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { }
public void init(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
System.err.printf("\tGL_VENDOR = %s\n", gl.glGetString(GL.GL_VENDOR));
System.err.printf("\tGL_RENDERER = %s\n", gl.glGetString(GL.GL_RENDERER));
System.err.printf("\tGL_VERSION = %s\n", gl.glGetString(GL.GL_VERSION));
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glDisable(GL.GL_DEPTH_TEST);
// ...
}
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
GL gl = drawable.getGL();
gl.glViewport(x, y, width, height);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
// ...
}
}
Auto odświeżanie
Gdy robimy animację (np. w grze), to zawartość okna musi być co pewien czas automagicznie rysowana. Dzięki klasie FPSAnimator nie musimy się już zbytnio o to martwić :) Wystarczy w init umieścić:
FPSAnimator animator = new FPSAnimator(drawable, 25); animator.start();
Teraz wszystko będzie odświeżane z szybkością 25 FPS, co powinno zapewnić płynność animacji, oraz małe zużycie procesora (przynajmniej teoretycznie ;)
Tekstury
Dodatkowo JOGL posiada kilka klas, które ułatwiają wczytywanie plików graficznych (np. TGA), oraz tworzenie tekstur.
Po więcej szczegółów odsyłam do projektu JOGL, gdzie można znaleźć dokumentację API oraz różnego rodzaju przykłady i dema :)

Proszę o komentarz
swietne intro do jogla :)
jedna uwaga: zeby FPSAnimator zadzialal trzeba importowac import com.sun.opengl.util.FPSAnimator;
pozdro
rysowany obiekt pojawia mi się tylko w pierwszej klatce animacji albo wcale :(. czy animator działa w ten sposób, że wywołuje przy rysowaniu klatki za każdym razem metodę dispaly() ? jeśli moja animacja ma się przesuwać o np zmienną x, to gdzie powinnam ją zwięszać ( x++ ) ? czy potrzeba do tego dodatkowej pętli?
powinienes zwiekszac x w display().
moze zadzialal clipping i dlatego nic nie widac?
przepraszam, powinnas ;)
Próbowałem odpalić ten kod w Netbeans-ie i wywala mi błąd run-timeowy:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
pomimo, że mam do bibliotek dodane jary: jogl i gluegen-rt.
Czy wiecie jak można temu zaradzić?
Prawdopodobnie w opcjach projektu (Run / VM Options)
trzeba dodać:
-Djava.library.path=lib
gdzie "lib" to katalog z plikami natywnymi .so lub .dll JOGLa.. Ale nie pamiętam dokładnie jakie to były pliki ;)
Mam bardzo naiwne pytanie:)
Programuje w JCreator i jak wkleiłem ten kod z tej strony
to mi nie znajduje bibliotek:
import com.sun.opengl.util.FPSAnimator;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
Podejrzewam, że muszę coś zainstalować(pewnie te biblioteki openGL), ale nie mam pojęcia co i jak?
Dodam, że mam zainstalowane JDK 6 Update 20.
Bardzo proszę o jakąkolwiek pomoc :)
Standardowo nie ma javax.media.opengl w JDK
i trzeba pobrać pliki "jar" ze strony JOGL-a.
Nie używam JCreatora, ale wydaje mi się,
że w opcjach projektu (?) powinno być miejsce,
gdzie można wskazać położenie plików .jar z javax.media.opengl.