# OpenGl 1.1 (LWJGL GL11.*) und weiter?



## UndWeiter? (23. Aug 2012)

Hallo,
ich programmiere noch nicht so lange,
um die 5 Jahre, ich bin jetzt 16. (Das erstmal als kleiner Intro, damit ihr mich eventuell einschätzen könnt)
Seit geschätzt einer Woche versuche ich mich jetzt an openGl über die LWJGL, das klappt auch ganz gut.
Ich habe mein erstes kleines 3d Spiel geschrieben...
Zum openGl lernen habe ich diese Tutorials benutz.
Soll heißen: 

```
GL11.glBegin(GL11.GL_QUADS);
```


```
...
```


```
GL11.glEnd();
```
Eventuel auch mal: 
	
	
	
	





```
GL11.glNewList(blubID, GL11.GL_COMPILE);
```
Naja, ihr wisst in welche Richtung das geht.

Die Tutorials sind allerdings teilweise noch von 2003.
Da wird ja inzwischen mehr möglich sein, grob gehört habe ich z.B. von VBO oder so .
Deshalb wollte ich jetzt gerne 'ein paar openGl Versionen' aufsteigen, und suche dazu geeignetes Tutorialmaterial. Mein Problem ist, das ich z.B. auf solchen seiten  (auch wenn sie ein gutes Grundverständnis liefert) nicht fähig bin den Code zu poriteren, weil sich die original openGl API und die der LWJGL vielleicht gleichen, dann aber in manchen Details, zumindest für mich, zu groß unterscheiden, oder eben zu klein...

Meine eigentliche frage also:
Welche openGL Version sollte ich lernen? Die ganz neuen werden ja auch nicht von jedem überall unterstützt. Und dann, ob ihr eventuell irgendwelche openGl Tutorials kennt? Es würde eigentlich ein beiliegender Java-Code reichen, ich behaupte einfach mal, ich kann ganz gut lernen, indem ich mich in fremd Code vertiefe.
Viele Grüße,
UndWeiter?


----------



## Network (23. Aug 2012)

Darauf kann man nicht antworten "lerne OpenGL X.X". Die OpenGL Version 1.1 enthält alle grundlegenden Dinge die man braucht für eine 3D Darstellung.
Die späteren Versionen erweitern nur die Funktionalitäten bzw. Optionen zur Darstellung. Da kommen dann halt ein paar mehr mögliche Methoden hinzu.
Es ist das selbe mit Java, man kann nicht fragen "welche Java Version sollte ich lernen".

Geh auf OpenGL ? Wikipedia und such dir die Version raus, die alle Funktionalitäten unterstützt die du brauchst.
Brauchst du für dein nächstes Projekt mehr, dann steig auf eine höhere Version um und lern 2/3 neue Methoden dazu ^^

Allgemein gilt, dass die Tutorials von 2003 auch immernoch für die neuesten OpenGL Versionen gilt.

Gruß
Net


----------



## Marco13 (23. Aug 2012)

Das kann man so nicht sagen. OpenGL 1.1 enthält Funktionen, die offiziell als "deprecated" markiert sind. D.h. man sollte sie (eigentlich) nicht mehr verwenden. Man kann zwar davon ausgehen, dass sie auch von zukünftigen Versionen noch unterstützt werden, weil sonst die ganzen CAD-Hersteller mit Fackeln und Mistgabeln bei den Grafikkartenherstellern aufkreuzen würden, aber wenn man schon lernt, sollte man nicht die Sachen lernen, die schon "veraltet" sind. 

Bedauerlicherweise ist die OpenGL Welt vom OpenGL 1.x, die auf dem Redbook abgebildet war (ja, die aus Lego  ) inzwischen auseinandergenommen worden, und OpenGL 4.x hat mit 1.x nicht mehr viel zu tun. Das kann man finden, wie man will, aber an VBOs und Shadern kommt man praktisch nicht mehr vorbei - ja, auch wenn man nur ein einzelnes Dreieck rendern will (und ja, auch wenn das die Einstiegshürde deutlich erhöht...). 

Das Problem, das die meisten Tutorials veraltet sind, wird immer wieder erwähnt, wenn hier nach OpenGL-Tutorials gefragt wird (*wink mit dem Forensuch-Zaunpfahl*).

Ein aktuelles "Tutorial" (bzw. Buch) ist Learning Modern 3D Graphics Programming . Wenn du (wie ich  ) neben viel Text auch gerne compilierbare Beispiele willst: Ich fand nopper.tv - Norbert Nopper's Homepage ganz cool: Aktuelle, aufeinander aufbauende und gut kommentierte Beispiele - praktisch um einen Anfang zu haben.


----------



## Network (24. Aug 2012)

Ja 4.X wirft alles auf den Kopf. Aber um ehrlich zu sein hab ich noch nie ein System gesehen, dass mit 4.X lief? Kann es sein, dass es noch nicht all zu weit verbreitet ist?

Die deprecated Funktionen betrifft ein paar Hauptfunktion für die Darstellung aber das umlernen zur neuen stellt (für mich persöhnlich jedenfalls) keinerlei Probleme da. Ich dachte nebenbei immer dass OpenGL auf dem Rechner immer alle Versionen beinhaltet.
Und einen eigenen Shader aufzustellen um ein Dreieck darzustellen ???:L Ein Shader für Schatten-/Licht-/Wisch/X-Effekte ok, aber ein einfaches Dreieck? 

Was ich mit meiner Aussage erreichen wollte ist dass die derzeitigen Tutorials auch für die späteren Versionen eig. keinen Unterschied machen. Im Grunde muss man ja nur verstehen wie OpenGL bzw. allgemein Grafikdarstellungen funktionieren und wie man in etwa diverse Ziele in OpenGL erreicht.
Dieses Wissen reicht dann für OpenGL 1.1 als auch X.X (bis dato jedenfalls).
Mag sein dass sich Methodennamen und kleine Logiklücken etwas verändert haben, dass heißt nicht man muss sich neu einlernen sondern man muss die Documentation wechseln 
Aber klar, wenn es neue Tutorials gibt (wusste ich nicht, sind ja ziemlich rar allgemein) dann die neuen 

Gruß
Net


----------



## Guest2 (24. Aug 2012)

Moin,

schon mit OpenGL 3.0 wurde das OpenGL Deprecation Model eingeführt, bei dem sehr viele Funktionen als deprecated markiert wurden. Mit OpenGL 3.1 gab es dann die Unterscheidung zwischen dem Forward Compatible Context, bei dem alle deprecated Funktionen entfernt wurden und dem Full Context der auch die veralteten Funktionen noch zur Verfügung stellte.

Seit OpenGL 3.2 gibt es zusätzlich die Unterscheidung zwischen dem Core Profile, bei dem *fast* alle deprecated Funktionen entfernt wurden (alle bis auf 1 Funktion und 6 Attribute) und dem Compatibility Profile bei dem es die deprecated Funktionen noch gibt.

Aktuell gibt es also 3 Varianten: Compatibility Profile, Core Profile, Forward Compatible Core Profile

Wenn eine Grafikkarte aktuell OpenGL unterstützt, dann muss diese nur noch das Core Profile unterstützen! Praktisch unterstützen aber alle Grafikkarten auch das Compatibility Profile (und werden es wohl auch weiterhin).

Praktisch alles, was in den NeHe-Tutorials erklärt wird, bezieht sich auf die Fixed Function Pipeline. Alles davon ist deprecated und aus dem Core Profile entfernt. Seit OpenGL 3.1 muss mindestens ein Vertexshader und ein Fragmentshader eingebunden werden. Von allen OpenGL Funktionen, die in den NeHe-Tutorials erklärt werden, dürften nur etwa eine Handvoll nicht deprecated sein.

Nichtsdestotrotz, wenn man die Theorie hinter der Fixed Function Pipeline verstanden hat, hilft das natürlich auch bei den aktuellen OpenGL Versionen.

Btw.: Irgendeiner hier im Forum hat auch mal einen Link zu LWJGL Beispielen zur Learning Modern 3D Graphics Programming Seite gepostet, ich hab mir das damals aber leider nicht gemerkt.

Viele Grüße,
Fancy


----------



## Guest2 (24. Aug 2012)

Ok, Link gefunden:

http://www.java-forum.org/spiele-mu...227-lwjgl-vertexbufferobjects.html#post908102 -> https://github.com/rosickteam/OpenGL

(Hab sie mir selbst aber nicht angesehen)

Viele Grüße,
Fancy


----------



## Evil-Devil (24. Aug 2012)

Sonst auch ins LWJGL Wiki schauen, zb. auf die Learning LWJGL - LWJGL Seite. Kann einem sehr weiter helfen 

Prinzipiell sind die Funktionen in LWJGL zu 99,9% mit denen aus der OpenGL Spezifikation identisch. Einzige primäre Unterschiede ergeben sich bei der Verwendung von (Byte)Buffern die in Java für die OpenGL Anbindung derzeit die idealste Möglichkeit bieten.


----------



## UndWeiter? (24. Aug 2012)

Ok,
vielen dank,
für eure Tipps
(welche ihr wahrscheinlich jedem gibt, welcher hier nach openGl Tutorials fragt :bae
Der von Fancy gepostete link hat mir sehr geholfen. Wenn also irgendwann nochmal irgendjemand fragen sollte, den Link kann man verteilen .
Die anderen Fakten und Tutorials habe ich größtenteils schon gekannt,
aber eure Meinungen, haben mir den weg gewiesen, ob's sich lohnt 'höhere' openGl Versionen zu lernen.
Was ja unter anderem (wenn vielleicht auch etwas versteckt) meine frage war.

Vielen Dank also.
Schönes Wochenende.

UndWeiter?
(...auf, sich aufs Fahrrad schwingend, zu erklimmen höhere Sphären des openGl-Berges...)


----------

