Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Hey,
Ich beschäftige mich gerade mit OpenGL 3.X und höher und habe nun Probleme Objekte richtig zu rendern. Die gängie Methode sollte es ja sein ein/mehrere VBO(s) zu erstellen und anschließend erstellt man ein VAO mit den Daten.
Das Problem beginnt, wenn das Objekt 2 oder mehr Texturen hat, da ich ja nur zu begin einmal eine Texture binden kann. Nur wie macht man es richtig? Ich habe wo gelesen, dass man für jede Textur die das Objekt hat ein extra VBO erstellt nur ist das wirklich schnell? Und wie setze ich dann richtig das VAO zusammen bzw. den passenden Shader?
Du kannst für jedes Object eine eigene Textur binden. Ich habe ein etwas älterer Quelltext gefunden welcher 2 Object mit unterschiedlicher Textur demonstriert. Vieleicht hilft dir dieser weiter.
Grundsätzlich kannst du zur Zeit tatsächlich immernur mit einigen wenigen Texturen rendern. Es gibt ein paar sehr neue Extensions die das aufheben können, aber ich glaube nicht, dass dich diese jetzt weiterhelfe. (Bindless Texture) Gängig gibt es im Prinzip zwei Lösungsansätze die je nach Fall zur Anwendung kommen:
Die verschiedenen Texturen verbinden. Zum Beispiel in einem Texturatlas oder noch besser einem Texture Array.
Oder aber ein Objekt nicht in einem Schwung rendern sondern die verschieden texturierten Teile jeweils einzelln rendern. Prinzipiell ein weniger performanter Ansatz, weil mehr Draw Calls leicht eine signifikante Engstelle werden kann. Texturwechsel sind wie alle Statewechsel auch nicht gerade das Schnellste.
Es besteht auch noch die theoretische Möglichkeit mit mehreren Samplern also Multitexturing mit mehreren Textureunits und die Textur im Shader auswählen. Allerdings ist die Anzahl der Texturen dann wieder stark beschränkt, weil nur eine bestimmte Anzahl Texture Units zur Verfügung steht. Die Performance ist auf jeden Fall ersterem unterlegen, im Vergleich zu 2. traue ich mir keine sichere Aussage zu. Schon gar nicht für de allgemeinen Fall.
Normalerweise würde ich in Richtung 1. gehen. Das Verbinden von Texturen kann von Hand machen oder automatisieren. Einige 3D Programme sollen das können. Der Renderer und Shader sind außerdem super simpel umzusetzen, weil ja weiterhin nur eine logische Textur existiert.
Mitglieder in diesem Forum: 0 Mitglieder und 48 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.