Modelformat

Aus DGL Wiki
Version vom 13. Mai 2008, 15:40 Uhr von TAK2004 (Diskussion | Beiträge) (Die Seite wurde neu angelegt: Es gibt einige Arten von Modelformaten, Textbasierte, Binäre sogar grafische(siehe parametrisierte Models). Die Formate sind auf bestimmte Ziele ausgerichtet und demen...)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Es gibt einige Arten von Modelformaten, Textbasierte, Binäre sogar grafische(siehe parametrisierte Models). Die Formate sind auf bestimmte Ziele ausgerichtet und dementsprechend auch im Aufbau unterschiedlich.

In diesem Artikel möchte ich ein für OpenGL optimiertes Format vorstellen, welches als weiteres Kriterium eine sehr geringe CPU und Ladezeit in anspruch nimmt. Also sollten wir uns erstmal die für OpenGL benötigten Daten angucken. Vertex=float x,float y,float z Color=Vertice Normal=Vertice Texcoord=float u,float v Index=int i

OpenGL bietet mehere möglichkeiten diese Daten darzustellen. -VBO(virtual buffer object) -Bruteforce(glBegin/glEnd) -vertexarray -displaylist(vertexarray oder bruteforce) Die performantesten Varianten sind Displaylist mit vertexarray und VBO. Displaylisten haben aber den nachteil, dass sie gering langsamer sind und nicht so flexibel wie VBO sind. VBO bietet uns 2 möglichkeiten, die Daten in den VRam zu speichern, als einzelne Streams und als ein einziger Stream. Hier sollte man alle Daten als einzelne Streams behandeln, also Verticelist,Normallist,Colorlist,... . So können wir später einzelne Streams abschalten und anschalten, wenn wir sie beim Zeichnen benötigen.

Wozu das Index ? Der Index zeigt auf ein Wert in der Vertex-, Color-, Normal-,... strean. Man kann also bei großen Models viel Platz sparen, wenn man Indices verwendet, da man jedes Datenelement nur einmal ablegt und durch den Index diesen mehrfach verwenden kann.

Model -Verticelist -Normallist -Colorlist -Texcoordlist -Indices

Nun brauchen wir auch Texturen und Shader für unsere Models. Um diese zu verwenden brauchen wir Faces, also müssen Flächen bilden. Jede Fläche bekommt den Startindex, die Vertexcount und nun noch das Material. Das Material ist ein Name, über den wir auf eine Ressource zugreifen können, die die Texturen und Shader verwalten. Material -Start -Count -Name

Man könnte z.B. ein Script oder XML Datei erstellen, die alle benötigten Texturen,Flags und Shader enthält. Diese wären dann unsere Materialfiles und werden durch das Model geladen.

Model -Verticelist -Normallist -Colorlist -Texcoordlist -Indices -Faces

Wenn man Shader verwendet, dann könnte man die tangenten mit reinpacken.

Okey Nun müssen wird die Daten auch noch speichern und das möglichst schnell Ladbar. Hier kann man Serializing aufgreifen und die Daten und den Loader entsprechend anpassen. Bei diesem Ansatz wird