DirectX 11 2d rendering



  • Hallo, ich will eine 2D grafik engine mit directx 11 programmieren.
    Nun möchte ich mich lieber mal umhören wie das am besten geht, bevor ich nach einem monat merke, dass ich einen falschen ansatz hatte (ähnliches ist mir schon of passiert ^^ ).

    Was ist der beste (schnellste) weg um 2d sprites auf zu zeichnen, aktualisieren und später auch zu animieren - kurz rendern.

    Bisherige Idee:
    Eine sprite ist EIN vertex, welche informationen über position, rotation, größe und texturkoordinaten enthällt.
    Während dem rendering erstellt dann ein geometrie-shader aus diesen vertexen komplette sprites (das sind in dx11 einfach rechtecke aus 4 vertexen, wobei der
    z-buffer ausgeschaltet wird).
    Diese Sprites (vertexe) werden gruppenweise gezeichnet, wobei jeweil eine gruppe einem vertex-buffer entspricht, welcher mit nur einem draw-call gezeichnet wird.
    -> 1 sprite = 1 vertex; 1 gruppe = 1 vertexbuffer mit sprites = ein drawcall
    -> es ist möglich viele sprites mit sehr wenigen drawcalls zu zeichen und dabei auch nur sehr wenige vertexe erstellen zu müssen (1 pro sprite)

    Was haltet ihr davon, ist es eine gute idee das ganze so zu lösen?
    Theoretisch dürfte es bei dem system doch auch keine probleme später geben, wenn ich komplexere lichefekte einbauen will? (das würde ja dann im pixelshader passieren und der wird ja nach dem geometrieshader aufgerufen) ?

    Wäre echt nett, wenn mir eine mal ihre meinung sagen könnten, und/oder mir andere vorschläge geben könnten 👍


  • Mod

    einfachste und schnellste duerfte via instanzing sein mit 1:4 vertices.



  • hast du eine beispielanwendung, die dieses verfahren verwendet? hab mich mit instancing noch nie beschäftigt.. 😉


  • Mod

    im sdk keine gefunden?



  • nicht 2d ich meine eigentlich nichts anders außer dem zbuffer, aber naja.. hätte lieber ein 2d beispiel



  • Naja - letztlich kannst du doch 3D zeichnen, die z-Koordinate immer 0 lassen und ne orthogonal Projektionsmatrix verwenden ? Das ist dann 2D 😃

    So kannst du alle 3D Beispiele doch auch auf 2D anwenden ?



  • gibt es dardurch nicht einen unheimlichen geschwindigkeitsverlust, wenn der die ganze zeit noch z-koordinaten mitberechnet?
    Ich meine bei 2d muss der ja die geometrischen formen (überlagerungen, usw. ), nicht wirklich beachten (einfach übereinander zeichen und überschreiben).
    Außerdem, in einer 3d welt schatten zu berechnen ist VIEL komplexer als wenn alles nur 2d läuft...



  • Die Grafikkarte ist so gebaut, dass sie nunmal mit 3D-Vektoren rechnet. Von daher ist es auch nicht langsamer als wenn man gleich 2D auf der CPU oder GPU nimmt.



  • Ok, wieder was gelernt :xmas1: danke


Anmelden zum Antworten