OpenGL VA/VBO und texturwechsel



  • Wenn ich mit Vertex Array/VBOs arbeite, gibt es dann eine Möglichkeit mit einem einzigen OpenGL Befehl etwas zu zeichenen, dass unterschiedliche Texturen verwendet?

    Oder muss ich zwingend alle polygone mit der selben Textur einer eigenem VA zuweisen und vor dem zeichnen jeweils bindTexture anwenden?



  • muss ich zwingend alle polygone mit der selben Textur einer eigenem VA zuweisen und vor dem zeichnen jeweils bindTexture anwenden?

    Es wird in den meissten Faellen die sinnvollste Loesung sein.
    Gibt es denn irgendeinen Grund der dagegen spraeche?


  • Mod

    Osbios schrieb:

    Wenn ich mit Vertex Array/VBOs arbeite, gibt es dann eine Möglichkeit mit einem einzigen OpenGL Befehl etwas zu zeichenen, dass unterschiedliche Texturen verwendet?

    du kannst einen texture atlas verwenden und dann jeweils die gewuenschte textur mittels der texturcoordinaten selektieren.

    Oder muss ich zwingend alle polygone mit der selben Textur einer eigenem VA zuweisen und vor dem zeichnen jeweils bindTexture anwenden?

    du musst keinen eigenen VA machen, du kannst mittels glDrawArrays einfach den teil aus dem VA zeichnen der die momentane textur benutzen soll (falls du keinen textur atlas verwenden moechtest/kannst).



  • rapso schrieb:

    du kannst einen texture atlas verwenden und dann jeweils die gewuenschte textur mittels der texturcoordinaten selektieren.

    Führt das nicht zu Artefakten an den Rändern, weil eigentlich unbeteiligte Nachbartexturen beim Filtern mit einbezogen werden?


  • Mod

    Registrierter Troll schrieb:

    rapso schrieb:

    du kannst einen texture atlas verwenden und dann jeweils die gewuenschte textur mittels der texturcoordinaten selektieren.

    Führt das nicht zu Artefakten an den Rändern, weil eigentlich unbeteiligte Nachbartexturen beim Filtern mit einbezogen werden?

    Ja, das fuehrt in jedem fall zu artefakten, falls du unbeabsichtigt ueber den rand hinweg filterst. bei normalen texturen ist das weniger sichtbar, falls du auf clmaping stellst, aber falls man es richtig haben will, sollte man schon das texel centrum als textur coordinate setzen, dann geht es in beiden faellen (ohne mipmapping).
    wenn es dann zum mipmapping kommt, wird alles natuerlich noch viel schlimmer bei textur atlanten, aber es gibt einige wege das zu kompensieren, z.b.
    - rand um textur ziehen in der selben farbe die die textur
    - moeglichst aenlich farbige texturen aneinander legen
    - mipmapping ausschalten
    - uv coordinaten auf texel centrum
    ...

    nichts davon ist perfect. ein quality vs performance/simplicity kampf.



  • Ich war mir nicht sicher ob ich noch eventuelle Wissenslücken hatte, und habe daher nachgefragt. Bei all den Erweiterungen hätte es ja auch eine dafür geben können.

    Textur atlase werde ich erstmal nicht einsetzen.

    Ich benötige also nur eine VA, und für jede textur eine liste mit den zu texturirenden normals. Und hoppse dann von glBindTexture und glDrawArrays hin und her. 🙂

    Ich hatte ansonsten noch Display Listen im Netzt gefunden.
    Werden Display Listen in modenrnen OpenGL Anwendungen noch eingesetzt? Und nutzen sie etwas bezüglich der Geschwindigkeit?



  • Osbios schrieb:

    Ich war mir nicht sicher ob ich noch eventuelle Wissenslücken hatte, und habe daher nachgefragt. Bei all den Erweiterungen hätte es ja auch eine dafür geben können.

    Textur atlase werde ich erstmal nicht einsetzen.

    Ich benötige also nur eine VA, und für jede textur eine liste mit den zu texturirenden normals. Und hoppse dann von glBindTexture und glDrawArrays hin und her. 🙂

    Ich hatte ansonsten noch Display Listen im Netzt gefunden.
    Werden Display Listen in modenrnen OpenGL Anwendungen noch eingesetzt? Und nutzen sie etwas bezüglich der Geschwindigkeit?

    Falls es dich noch interessiert:
    Displaylists sind deprecated..
    rya.



  • Hello

    Ähnliches Problem:
    Ich arbeite zurzeit gerade an einer Kartenapplikation fürs iPhone, ähnlich wie Google Maps/Earth... vorallem deren smoothes scrollen & zoomen möchte ich auch erreichen.
    Das Problem ist, dass ich Kartenkacheln vom Internet laden muss und auf dem iPhone natürlich nicht genügend RAM habe um alle dort reinzuladen.
    Wie emphielt ihr mir nun vorzugehen? Die Texturen immer wieder neu zu laden wenn sie verfügbar sind und mittels vielen GLDraw Arrays ein Triangle_Strip dafür zu zeichnen... oder die Vertices (Karteneckpunkte) in ein VBO zu laden, alle immer zu zeichnen und die Texturen von einem dynamischen Textur Atlas zu laden... wäre das nicht schneller, dafür aber viel komplizierter?

    besten dank


Anmelden zum Antworten