ich habe mir eben den begriff opengl im wiki angeschaut und wollte nachfragen, was diese techniken bedeuten, bzw. was man damit zaubern kann. fangen wir zunächst enimal mit OpenGL 1.1 an:
* OpenGL 1.1 (1997)
o Vertex Arrays
o Texture Objects
o Polygon Offset
nach und nach werde ich neuere versionen hinzufügen, sobald alle fragen zur aktuell diskutierten version geklärt sind.
Registriert: Fr Mai 16, 2008 20:26 Beiträge: 158 Wohnort: Berlin
Programmiersprache: c++,c#,java,ruby,php
Wenn du schon im Wiki warst, wieso hast du da nicht gleich die entsprechenden Einträge dazu gelesen? ^^
Falls du das schon hast Entschuldigung, dann hab ich deine frage nicht ganz verstanden.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Verwechsel bitte nicht das Wiki von DelphiGL (http://wiki.delphigl.com) mit den Wikis der Wikimedia Foundation wie zum Beispiel Wikipedia (http://de.wikipedia.org). Sowas geschieht öfter und führt zu interessanten missverständnissen.
Und zu Texture Objects: Das dürfte unter glGenTextures, glBindTexture und ähnlichem gefunden werden (die Texture Objects von 1.1 müsste ja einfach die assoziierung der Textur mit allen Eigenschaften und Einstellungen mit der Nummer, dem Objekt, sein, oder?)
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Texture Objects sind ganz normale Texturen. In OpenGL 1.0 gab es noch keine Texturen also wurden die Texture Objects eingeführt. Seit OpenGL 1.1 sind diese fundamentaler Bestandteil von OpenGL. Die heißen Objects, da Texturen über eine ID angesprochen werden. Sozusagen können dadurch im Treiber auch Objekte benutzt werden obwohl die Schnittstelle prozedural ist.
Polygon Offset dient dazu um die Tiefe eines Objektes anpassen zu können. Damit kann man dafür sorgen, dass ein Objekt gezeichnet wird was die selbe Tiefe hat. In erster Linie wird so etwas für normale grafische Darstellung verwendet. Wenn man zum Beispiel mit OpenGL Linien die Flächen eines Objektes nachzeichnen möchte. Aber dafür genügt es meistens einfach schon den Tiefentest anders einzustellen.
So viel dazu. Ich persönlich weiß gerade nicht ob ich diese Vorgehensweise allerdings so gut finde. Denn OpenGL wurde (meistens) immer weiter entwickelt. Mit jeder neuen Version wurde irgendetwas erweitert oder teilweise auch durch neuere Techniken ersetzt.
Texturen sind ein Beispiel für etwas was dauerhaft erweitert wird. Dort kamen unzählige neue Formate, neue Modis zum Zeichnen etc etc etc dazu. Vor OpenGL 1.4 mussten MipMaps zum Beispiel per Hand (oder über glu) generiert werden. Allerdings danach wurde das von der Grafikkarte erledigt. Wenn vorhanden sollte man so etwas auch nutzen. Texturen sind aber vergleichsweise harmlos. Viel schlimmer sind zum Beispiel die folgenden Punkte.
Die in OpeNGL eingebaute Selektion ist eigentlich bis heute das Einzige was OpenGL offiziell anbietet um ein gezeichnetes Objekt wieder ausfindig zu machen. Allerdings ist dieses angewendetet Verfahren nicht so glücklich für aktuelle Grafikkarten. Entsprechend ist sie zu Alternativen um ein vielfaches langsamer. Und der kleinste Fehler sorgt dafür, dass die Selektion eine Art Eigenleben entwickelt. Also absolut nicht zu empfehlen. Heutzutage sollte die Farbselection (hab gerade keinen Link) benutzt werden. Dabei handelt es sich aber eigentlich nur um einen Trick.
VertexArray und Compiled VertexArray sind Möglichkeiten die Daten deiner Geometrie in einem Speicher abzulegen und diesen dann zum Zeichnen zu benutzen. Das Problem da ist diese Technik basiert auf den Anfängen der Grafikhardware. Die Karten hatte da nur einen Speicher für Texturen und für den Bildinhalt. Seit knapp 10 Jahren oder so haben aber Karten auch einen Speicher für VertexDaten. Dazu gab es sowohl von NVidia als auch von ATI jeweils eigene Lösungen die wurden dann später zu VertexBufferObjects zusammengefasst und in Version 1.5 in den OpenGL Kern aufgenommen. Und selbst diese Technik ist so alt und verbreitet, dass man alle anderen Sachen getrost links liegen lassen darf. Selbst wenn die Hardware das nicht kann, dann emuliert der Treiber dies durch VertexArrays. Aber dadurch, dass die Daten auf der Karte liegen ist es um ein vielfaches schneller und bemmst die Grafikkarte nicht unnötig aus.
DisplayListen bringen heutzutage auch kaum noch Vorteile. Ja sie sind schneller als der Imediate Modus. Aber auch nur, weil für VertexDaten intern dann VertexBufferObjects benutzt werden. Aber man nimmt sich Flexibilität, da DisplayListen absolut statisch sind. Vor über 10 Jahren hatte man durch die Funktionsaufrufe etc einiges einsparen können.
Das sind nur ein paar Beispiele. Das kann man noch beliebig erweitern. Eines der Hauptprobleme an OpenGL ist es, dass man historischen Kram mit sich rumschleppen muss. Dort passiert es dann sehr leicht, dass man auf das falsche Pferd setzt. Was vor 10 Jahren noch Gang und Gebe war kann heute zwar noch "funktionieren" aber ist dann keines wegs mehr zeitgemäß oder praktikabel. Deswegen wäre es zu mindest aus meiner Sicht wohl besser, wenn du problemorientiert an OpenGL herangehst bzw nicht mit den ältesten Sachen anfängst sondern mit neueren technologien und im Bedarfsfall dann nach Alternativen suchst.
Ich möchte damit nicht sagen, dass es falsch ist sich mit den Sachen zu beschäftigen. Ganz im Gegenteil. Es ist sehr gut zu wissen was es alles gibt um evtl auch mal über seinen eigenen Tellerrand zu schauen. Nur solltest du besonders bei älteren Sachen sehr vorsichtig sein was deren Gültigkeit angeht. Es werden immer wieder Techniken über den Haufen geworfen um neuere einzuführen. Und den vollen Überblick über alles hat man als Einzelner wohl vermutlich nur selten.
Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.