OpenGL#

http://de.wikipedia.org/wiki/OpenGL

Grundsätzlich muss OpenGL vom X-Server unterstätzt werden. Um dies zu testen, benutzt man das Programm glxinfo. Dies hat bei mir bisher immer Version 1.2 (oder in einem Fall gar kein OpenGL) ausgegeben.

verschiedene Versionen #

Auf der Seite JavaGrafik gibt es eine Diskussion, was einzelne Versionen von OpenGL bedeuten und wann man sie benutzen kann. Da mir die Antwort auf diese Fragen immer noch nicht ganz klar ist, erbitte ich hier (oder auf JavaGrafik) Anmerkungen geneigter, wissender Leser. ;-)
OpenGL 1.1 ist schon recht alt und hat Befehle wie z.B. "glBindTexture" eingeführt. Mit diesen wurde es möglich Texturen vorzuladen und dann wenn man sie benötigt schnell aktiv zu schalten. Mit "glTexImage2D" kann man eine Bitmap als Textur einstellen - hierbei werden aber alle Daten des Bildes an die Grafikkarte gesendet und dies pro Frame immer wieder zu tun dauert einfach zu lange.

OpenGL 1.2 kam unter anderem mit dem Support für dreidimensionale Texturen. Ihr kennt dies vielleicht von Povray - dort ist z.B. die Holztextur dreidimensional. Dies bedeuet, dass für ein Vector (x,y,z) eindeutig ein Farbwert ermittelt werden kann. Da dreidimensionale Texturen enorm viel Speicher fressen werden sie nicht viel verwendet - doch aufgrund der Fähigkeit mit ihnen besondere Effekte zu erzeugen und des wachsenden Grafikkartenspeichers werden sie zunehmend attraktiver.

OpenGL 1.3 brachte Multitexturing - dies ist ein wichtiges Feature wenn man z.B. Lightmaps benutzen möchte. Dies bedeutet dass eine Textur eine Wand enthalten kann und die andere Textur einen weissen Punkt der nach aussen dunkler wird. Kombiniert man beide übereinander sieht es so aus als würde die Wand von einem Scheinwerfer angestrahlt.

OpenGL 1.4 enthält erweiterte Funktionen für Nebel - und man kann Depth-Texturen definieren. Diese sind soweit ich weiß für Shadowmaps nützlich.

OpenGL 2.0 bringt nun auch Support für Vertex- und Fragmentprogramme mit. Dies sind Programme die auf der Grafikkarte laufen können und entweder die Geometrie selbst (Vertices) oder die erzeugten Pixel (Fragmente) verändern können. Mit diesen Techniken werden z.B. Wasseroberflächen, Spiegelungen, Pixelbasierte Beleuchtung und inzwischen auch das Skinning (animieren von Charakteren über die Knochen) realisiert.

Als absolute Grundlage für ein Spiel mit der OpenGL würde ich die Version 1.3 sehen - denn hier kann man die Beleuchtung schon richtig gut implementieren und diese trägt enorm zu der Gesamtstimmung eines Spiels bei. Es ist aber kein Problem das Spiel später auf einem Rechner laufen zu lassen der nur eine ältere OpenGL-Version hat - es genügt im Programm auf "#define GL_VERSION_1_3 1" abzufragen. Wie das in JOGL realisiert ist, weiß ich allerdings nicht. --StefanGaffga

OpenGL in Java #

Auf der Seite JavaGrafik stehen einige Bemerkungen hierzu.