Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

1

29.11.2013, 14:43

DirectX11 - 2D Tilemap rendern

Hi,

wie rendert man am besten unter DirectX11 eine 2D Tilemap?

Legt man die Map komplett in den Raum (mit der Z-Koordinate 0) und bewegt dann nur die Kamera-Position, oder macht man es genau andersrum (die Welt bewegt sich)

Gibt es noch wichtige Tricks oder Techniken, die man beachten sollte? (Ich hab z.B. schon gelesen, dass man nur das rendern sollte, was wirklich angezeigt wird)


Gruß

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

29.11.2013, 14:50

Stichwort VBO. Das Objekt bleibt, wo es ist, die Kamera bewegt sich.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

02.12.2013, 08:55

VBO ist OpenGL, nicht DirectX.
Was extrem wichtig ist: So wenige Draw-Calls wie möglich erzeugen. Also auf keinen Fall jedes Tile einzeln zeichnen, sondern in größere Blöcke zusammenfassen.
Klar: Was nicht sichtbar ist, muss auch nicht gezeichnet werden. Es ist aber nicht schlimm, wenn ein paar unsichtbare Tiles gezeichnet werden, wenn du dafür immer viele auf einmal zeichnest.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

02.12.2013, 12:29

Wie heißt das D3D-Äquivalent zu VBO?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

02.12.2013, 12:40

VertexBuffer ;)

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

6

07.12.2013, 15:10

Hi,

wie arbeitet man am Besten mit dem VertexBuffer?
Soll man vor jedem Render-Vorgang den Vertexbuffer neu befüllen, oder gibt es eine schnellere Methode?
Kann man Vertices einzeln in den Buffer laden, oder muss man sie 1mal komplett in den Buffer schreiben? (d.H. muss ich die Vertices irgendwo zwischenspeichern?)


Gruß

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

07.12.2013, 15:19

Neu befüllen musst du nur, wenn sich etwas geändert hat.
Ich würde, wie gesagt, deine Map in große Blöcke aufteilen. Für jeden Block kannst du einen eigenen Vertex-Buffer benutzen. Solange du keine extrem riesigen Maps hast, sollte das kein Problem sein.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

07.12.2013, 15:28

Hi,

wie arbeitet man am Besten mit dem VertexBuffer?
Soll man vor jedem Render-Vorgang den Vertexbuffer neu befüllen, oder gibt es eine schnellere Methode?
Kann man Vertices einzeln in den Buffer laden, oder muss man sie 1mal komplett in den Buffer schreiben? (d.H. muss ich die Vertices irgendwo zwischenspeichern?)


Gruß


Eine Option: Du kannst deinen Puffer mit D3D11_USAGE_DYNAMIC und D3D11_CPU_ACCESS_WRITE erzeugen und einmal vor dem Update mappen (discard). Das führt natürlich zwangsläufig häufig zu einem 'renaming' von deinem Puffer. Um das zu minimieren kannst du den Puffer z.B. größer machen und nur alle 'n' Frames 'discarden'. Oder einen Ring aus Puffern verwenden (oder kombinieren), je nachdem was dir weiterhilft.

Edit: angenommen du musst häufig in deinem Puffer schreiben. Sollte das nicht notwendig sein, dann fährst du natürlich immer besser, wenn du die Daten schon vorbereitest.
@D13_Dreinig

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »David_pb« (07.12.2013, 15:33)


Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

9

07.12.2013, 15:49

Hi,

danke für die Antwort.

So richtig verstanden hab ich das nicht, wie man sehn kann bin ich noch am lernen...


Welche Möglichkeit wäre für eine 2D Tilemap die beste, bzw. einfachste Möglichkeit?
Ich hatte vor ein paar Jahren mal mit Directx9 gearbeitet, da hab ich vor jedem Rendern den VertexBuffer komplett neu gefüllt.



Gruß

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

10

21.12.2013, 11:32

Hi,

ich habe eine weitere Frage:
Beim Erstellen eines Vertex-Buffers muss man ja dessen Größe angeben:

C-/C++-Quelltext

1
vertexBufferDesc.ByteWidth = sizeof(VertexType) * m_vertexCount;


Was mach ich aber, wenn ich die Größe beim Erstellen noch nicht weis?


Gruß

Werbeanzeige