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

1

02.08.2007, 23:26

2 (Anfänger) Fragen zu den Sprites

Hi, ich versuch gerade den Ablauf beim Render der Sprites zu verstehen, aber da ist eine Unklarheit:

-> zu erst wird ein Sprite mit CreateSpriteType erstellt. Damit wird nur gesagt, dass es das Sprite gibt, aber nicht , dass es gerendert werden soll.
-> mit AddSprite wird es zum Klasseneigenen Vertexbuffer kopiert, so dass es beim nächsten Frame auch gerendert wird.
-> Danach wird der Buffer mit der Methode Update "bereit" gemacht, und mit der Methode Render wird alles gerendert.

Soweit so gut, oder hab ich einen Denkfehler gemacht?

Meine Frage ist jetzt: im nächsten Frame wiederholt sich das ganze, allerdings find ich nirgends die Stelle, an der der Buffer geleert wird, d.h. alle Sprites vom vorigen Frame müssten doch eigentlich genau gleich wieder gerendert werden, oder? Wo genau wird der Buffer wieder "geleert" ?

Zweite Frage: Nix wichtiges, aber warum nimmt man für Sprites eine TriangleList, bei der man 6 Vertizes benötigt, wenn doch theoretisch auch ein TriangelStrip mit 4 Vertizes reichen müsste ? (oder irr ich mich da)

Sry, wenn die Fragen vielleicht lächerlich sind, aber ich steig ja gerade erst ins Thema Spieleprogrammierung ein.

Danke für eure Antworten.

2

02.08.2007, 23:53

Zum ersten kann ich nichts sagen, da es klingt als seinen die Funktionen von der Triebasengine. Viele Engines/Bücher zum lernen erstellen bei jedem Schleifendurchlauf den Buffer neu wodurch er automatisch leer ist.

Bem zweiten liegt es daran das Triangle das englische Wort für Dreieck ist welches aus 3 Eckpunkten bestehtn. Um ein Rechteck darzustellen braucht man 2 Dreiecke was deine 6 Punkte ergibt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

03.08.2007, 11:37

Re: 2 (Anfänger) Fragen zu den Sprites

Zitat von »"Hans Wurst"«

Zweite Frage: Nix wichtiges, aber warum nimmt man für Sprites eine TriangleList, bei der man 6 Vertizes benötigt, wenn doch theoretisch auch ein TriangelStrip mit 4 Vertizes reichen müsste ? (oder irr ich mich da).


du irrst dich nicht. das problem mit dem tristrip ist nur, dass die sprites ja nicht zusammenhängen. um nichtzusammenhängende quads mit einem tristrip zu zeichnen, benötigt man pro quad zusätzliche 2 vertices (sog. "stop vertices"). allein damit sind wir also bereits bei 6 vertices pro quad auch mit tristrip. beim tristrip kommt aber noch dazu, dass diese zwei stop vertices pro sprite zu 4 degenerierten dreiecken _pro_ sprite führen. bei nicht indizierter geometrie (die hier vermutlich vorliegt) kann die graka diese dreiecke auch nicht eliminieren. mehrere sprites als triangle strip aus einem buffer zu zeichnen benötigt daher effektiv 6 vertices und 6 (!) dreiecke pro sprite (wobei nur von 2 was gezeichnet wird, die restlichen 4 dienen nur um von einem sprite zum nächsten zu hüpfen).

Progater

Treue Seele

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

4

03.08.2007, 17:07

ZU 1. Die Frage wurde zwar schon teilweise beantwortet, aber ich möchte etwas dazu sagen.
Du rufst ja die Methode ::Begin auf, bevor die Sprites zum Vertex-Buffer hinzugefügt werden und wenn du die Methode anguckst steht da folgendes:

C-/C++-Quelltext

1
2
    // Cursorposition des Vertex-Buffers zurücksetzen

    m_pVB->SetCursor(0);

Der Buffer wird einfach überschrieben wenn neue Sprites dazukommen und die Sptites, deren "Zeit" abgelaufen ist, werden einfach nicht mehr zum Buffer hinzugefügt ;)
To go back to the drawing board is not everyone's cup of tea! :-)

Werbeanzeige