Sprite

Aus DGL Wiki
Version vom 11. November 2005, 12:29 Uhr von TAK2004 (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Sprite

Eine Sprite ist eine 2 Dimmensionales Rechteck in einen 3 Dimmensionalen Raum, dabei wird die Sprite immer auf die Szene rauf gelegt. Für eine Sprite ist nur die X,Y Koordinate sowie die Ausmaße des Reechtecks von nöten. Die Tiefenkoordinate Z fällt dabei völlig weg. Sprites verwendet man für z.B. phseudo 2D Spielen sowie für für GUI Elemente. Dies kann durch den sogenannten Orthogonal Modus erreicht werde. Eine genauere erklärung hierzu finden Sie im folgendem Tutorial [1].

Vorteile

Durch die nutzung von OpenGL kann man durch 2 Möglichkeiten einfluss auf die Zeichenreihenfolge nehmen, zu einem durch das Richtige nacheinander zeichnen der einzlnen Sprites und zum anderen durch das hinzuziehen der Z koordinate, was unsere Sprite dann über das System der Zeichenreihenfolge versetzt.

OpenGL nutzt zur Darstellung der Grafiken die GPU welche um vieles leistungsfähiger ist als alternative 2D Grafik Libaries.

Nachteil

Wenn man nicht gerade auf die Z Koordinate zurück greift hat man das Problem, dass man auf die Zeichenreihenfolge achten muss um ein Korektes zeichnen zu Ermöglichen. Algorythmen zur Darstellung können somit größer werden und es kann auch dazu führen das die Daten vorher per Hand sortiert werden müssen, was sonnst die GPU für uns übernimmt.

Tipp

Schreiben Sie eine Hilfsfunktion die die Sprite zeichnet und benutzten sie dann folgende Reihenfolge für ein einfachen Code.

//Matrix auf den Stack legen
glPushMatrix;
//rotation
glRotatef(Sprite[i].Rotation, 0, 0, 1);
//skalierung
glScalef(Sprite[i].Scale);
//transformation
glTranslatef(Sprite[i].X, Sprite[i].X, Sprite[i].Layer);
DrawSprite(Sprite[i].Width,Sprite[i].Height);
//Matrix vom Stack zurück holen
glPopMatrix;

Dieser Variante hat den Vorteil, dass Sie mit "Sprite[i].Layer" die Position der Sprite in der Tiefe festlegen können und somit viel Code für Sortieren und andere Funktionen sparen