glrotate,gltranslate,glscale veraltet?
-
Hallo.
Hab nur so eine Frage,die mich beschäftigt.
Und zwar hör ich immer,dass die Matrixfunktionen nicht mehr gängig sind,bzw. von neueren OpenGl-Versionen gar nicht mehr unterstützt werden.Also:
Warum sollte ich keine Matrixfunktionen mehr nutzen(ich finde sie ganz praktisch)?
Werden diese von neueren OpenGl-Versionen wirklich nicht mehr unterstützt?Danke.
-
jein.
Modernes OpenGL hat einen Compatibility und ein Core Kontext. Wenn man Core benutzt hat man tatsächlich keine der Matrix Funktionen mehr.Core benutzt aber fast keiner, da es nicht wirklich Vorteile bringt. (Wusste ich auch noch nicht so lange)
Dennoch ist es empfehlenswert solche Sachen wie Matrizen nicht über die OpenGL Funktionen zu machen sondern z.B. mittels GLM. Denn im großen und ganzen ist das einfacher/logischer/besser zu handhaben.
Man berechnet die Matrizen dann mit C++ Funktionen und übergibt diese dem Shader als uniform.
GLM ist übrigens den OpenGL Funktionen nachgebaut. Einfach mal bei den Beispiele reinschnuppern: http://glm.g-truc.net/code.html
-
Ok,danke.
Werd ich machen.
-
Zwei Fragen noch:
Sollte ich die Beleuchtung,Material,usw. auch über GLM machen?
Und ich hab mir auch das pdf der GLM-Internetseite gedownloadet und drüber geschaut und glaube jetzt,dass man selbst die Vertexdaten,über GLM übergeben kann,oder brauch man dazu OpenGL?
Denn dann bräuchte man ja fast nur noch GLM und GLSL.
-
Osbios hat das falsch erklärt.
Es kommt drauf an welche OpenGL Version du verwendest. Die Matrizen Funktionen sind bis 2.x gültig. Ab 3.0 sind sie ungültig. Mischen sollte man die verschiedenen Versionen auf keinen Fall.
Man braucht sie in 3.x deshalb nicht mehr, weil OpenGL dort keine fixe, sondern eine programmierbare Pipeline hat. Man muss Matrizen etc alle selber erstellen und verwalten. Das hat Vor- und Nachteile. Da kommt GLM ins Spiel, da es die Matrizen berechnen kann und man sie dank der hohen OpenGL Affinität der Bibliothek direkt an die Shader übergeben kann. Shader sind in 3.x auch zwingend nötig zum zeichnen. Ansonsten sieht man nichts aufm Bildschirm.
Das ist übrigens bei DirectX genauso.
Aber ich empfehle dir dringenst, dir mal ein gutes OpenGL Tutorial zu 3.x durchzulesen und alle vorhergehenden Versionen zumindest vorerst zu ignorieren.
Sonst kommst du nur durcheinander.
Am besten programmiert man dafür auf einem Core Context, denn der lässt keine anderen Funktionen als die der bestellten Version zu. Sprich, benutze glTranslate auf nem 3.x Core Context, bekommst du eine Null Pointer Exception.Empfehlung:
http://arcsynthesis.org/gltut/
-
Oh... Jetzt muss ich meine komplette Engine umschreiben,bevor ich mit der Kolision und Physik weitermache.
Aber trotzdem danke.