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

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

1

17.02.2013, 12:28

VertexBuffer-Verwirrung

Hallo Leute,
Ich bin etwas verwirrt was das Thema VertexBuffer angeht. Ich weiß was ein Vertex-Buffer macht und habe ihn auch schon oft verwendet jedoch wird in dem Buch das ich gelesen habe immer nur kleine Demos erstellt und deshalb weiß ich nicht genau wie ich mit einem VertexBuffer in einem echten Spiel umgehen soll.
Der VertexBuffer speichert die Vertices, aber: Werden in einem VertexBuffer die Vertices jedes Objektes im Spiel gespeichert oder hat jedes Objekt seinen eigenen VertexBuffer?
Wie setze ich dann diese Buffer zusammen für meinen DeviceContext?
Der Error sitzt meistens vor dem Bildschirm! :D

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

17.02.2013, 12:31

Werden in einem VertexBuffer die Vertices jedes Objektes im Spiel gespeichert oder hat jedes Objekt seinen eigenen VertexBuffer?


Kommt drauf an. Für die meisten Modelle macht es sinn einen eigenen Puffer zu allokieren und dort die Vertices zu speichern. In anderen Fällen (z.B. Partikel) macht es mehr Sinn die Daten zu batchen.
@D13_Dreinig

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

3

17.02.2013, 13:26

Ok danke David.
Noch eine Frage:
Bei mir sieht die Draw-Methode für das Dreieck so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
void D3DClass::Draw()
{
    unsigned int stride = sizeof(VertexPos);
    unsigned int offset = 0;

    pDeviceContext->IASetInputLayout(pInputLayout);
    pDeviceContext->IASetVertexBuffers(0, 1, &pVertexBuffer, &stride, &offset);
    pDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);

    pDeviceContext->VSSetShader(pSolidColorVS, 0, 0);
    pDeviceContext->PSSetShader(pSolidColorPS, 0, 0);
    pDeviceContext->Draw(4,0);
}

Soll ich diesen Code für jedes zu zeichnende Objekt aufrufen bzw. muss ich für jedes Objekt den Shader usw. für den Context setzen?
Der Error sitzt meistens vor dem Bildschirm! :D

idontknow

unregistriert

4

17.02.2013, 13:28

Wenn sich dein Context/InputLayout/Shader/Buffer nicht ändert, dann kannst du den auch nur einmal setzen.

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

5

17.02.2013, 13:47

Okay aber wenn ich das jetzt so mache z.B.: Modell1->draw setzt den VertexBuffer von Modell1 für den DeviceContext mit IASetVertexBuffers und Modell2->draw den VertexBuffer von Modell2.
Wird mein erstes Modell jetzt gezeichnet?
Sorry dass ich hier so Anfänger Fragen stelle aber zurzeit Blicke ich echt nicht mehr durch :S
Der Error sitzt meistens vor dem Bildschirm! :D

FSA

Community-Fossil

  • Private Nachricht senden

6

17.02.2013, 14:00

Wenn du den 1. Vertex Buffer setzt und dann das Modell renderst wird das Modell mit dem 1. Vertex Buffer gerendert. Wenn du den 2. Vertex Buffer setzt und das Modell renderst, wird das Modell mit dem 2. Vertex Buffer gerendert.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

17.02.2013, 14:00

Gezeichnet wird, wann immer Draw*() aufgerufen wird und zwar mit was auch immer gerade in dem Moment, da Draw*() aufgerufen wird, gesetzt ist. Also Vertexbuffer für Modell 1 setzen, Draw*() aufrufen, VertexBuffer für Modell 2 setzen, Draw*() aurufen, ...

FSA

Community-Fossil

  • Private Nachricht senden

8

17.02.2013, 14:01

Ninja-Dot :ninja:

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

9

17.02.2013, 14:02

Aaaah! Danke! Langsam verstehe ich das ganze!
Danke Leute wie immer habt ihr mir aus der Patsche geholfen :D
Der Error sitzt meistens vor dem Bildschirm! :D

Werbeanzeige