glDrawElements mit Attribute pro Fläche?



  • Guten Morgen,

    ich mache meine ersten Schritte mit OpenGL und habe einen VertexBuffer und Indexbuffer angelegt, gezeichnet wird dann mit glDrawElements, da man hier ja schön jeden Vertex mehrmals nutzen kann.
    Nun frage ich mich wie ich es am besten realisieren kann, dass jede Fläche eine unterschiedliche Farbe bekommt, am besten über einen ColorBuffer pro Fläche, der bräuchte ja dann aber einen anderen Index als die Vertexe.
    Dasselbe Problem habe ich wenn jeder geteilte Vertex unterschiedliche Texturkoordinaten bekommen soll.

    Wie löst man sowas am besten?



  • Ich arbeite jetzt erstmal mit glDrawArrays. Macht es für die Vertex Shader eigentlich einen Unterschied ob sie per glDrawElements die Vertexe mit Index bekommen oder wie bei glDrawArray alle am Stück?



  • Macht es für die Vertex Shader eigentlich einen Unterschied ob sie per glDrawElements

    Wenn du im Shader auf den index zugreifen musst/willst/sollst, sollte der ins attrib array rein ...
    (Achtung, nicht verwechseln mit Instanced Rendering ... ) oder gl_VertexID nutzen (keine Ahnung ob das immer und überall verfügbar)
    Nutzt Du gl_VertexID / gl_InstanceID machts schon nen Unterschied, sonst eher nicht ...

    Nun frage ich mich wie ich es am besten realisieren kann, dass jede Fläche eine unterschiedliche Farbe bekommt

    Normal: wenn die Farbe von einem Vertex unterschiedlich ist, dann ist es nicht das selbe Vertex Attrib Entry -> eigener Eintrag (selbe vertex pos aber unterschiedliche Farbe) -> Indexing kann man trotzdem verwenden(flexibilität), man spart nur keine Verticies mehr ein.

    Alternativ kannst im VShader auf auf die Index pos zugreifen und die farbe aus ner eindimensionalen Textur lesen, oder sowas Ähnliches .... index -> Farbe mapping kostet aber meist etwas laufzeit .... ist dann die frage was dir an der stelle wichtiger ist, laufzeit oder speicher (meist ist es laufzeit)



  • Vielen Dank für die ausführlichiche Antwort. Die Möglichkeiten scheinen ja wirklich vielfältig zu sein. Eine große Spielwiese.


Log in to reply