ich weiß ich hab das vor einiger Zeit schonmal gefragt, aber irgendwie komm ich mit dem Index Buffer nicht klar, bzw finde ich ihn sehr unausgeklügelt..
Wenn ich nur Vertices habe mag das mit dem IndexBuffer ja noch funktionieren.. wenn ich dann allerdings noch TexturKoordinaten dazu packe, bekomme ich schon das problem das ich einige der Vertices doppelt in den VertexArray packen muß, da ja das gleiche vertex mehrere UV koordinaten haben kann..
Wenn ich jetzt dann aber auch noch z.B. die Tangenten zusätzlich zu den Normals mit übergebe hat der IndexBuffer nahezu komplett den sinn verloren, da die Tangenten logischerweise bei jedem Triangle verschieden sind.
Bei einer Kugel die 20x20 spans hat kommt im optimalsten falle das raus:
382 Vertices
760 Triangles
439 UV Koordinaten
Wenn ich dafür noch meine Tangenten berechne komme ich auf 1560 verschiedene kombinationen = ich hab im endeffekt jedes Vertex im durchschnitt 4x in meinem VertexArray.
Gut, gegenüber den 2280 komplett ohne IndexBuffer ist das immernoch ganz gut, aber... wieso kann es nicht verschiedene IndexBuffer für UV, Vertex, Normal etc geben?
Das würde auch andere dinge extrem erleichtern, z.B. das deformieren des Meshes (Skinning etc).. wenn ich das auf der CPU mache und nicht im Shader müßte ich jetzt 1560 Vertices transformieren statt 382.. (Gut ich kann auch 382 transformieren und dannach wieder den array basteln..), aber ich denke ihr wisst was ich meine, oder?
Oder hab ich irgendwo einen denkfehler, bzw mach ich irgendwas falsch?
Es gibt nur einen indexbuffer und das reicht im prinzip auch aus. In der regel werden tangent und bitangent aus den texturkoordinaten erzeugt, anschließend gemittelt (nur wenn die texturkoordinaten zusammenhängend sind) und zum normal orthogonalisiert.
Effektiv werden nur neue vertices benötigt, wenn es bereits vertices mit verschiedenen texturkoordinaten gibt.
Im Falle eines 19x19 Quadmeshkugel werden halt die positionen an den polen 20x mehrfach gespeichert sowie 19 zusätzliche vertices für die naht. Insgesamt sind es nicht mehr als 10% die zusätzlich gebraucht werden. Ob nun Quads oder triangles gezteichnet werden hängt nur vom index ab (Quads werden aber in zwei triangles umgewandelt, auch wenn es nicht die optmale interpolationslösung ist. Zudem sind Quads aus diesem grund mit OpenGL3.0 deprecated)
Wenndas erzeugen von tangent / bitangent zum aufblähen der daten führt, ist die Berechnung nicht optimal.....
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.