Seite 1 von 1

Spriterotation um die Y-Achse

Verfasst: 22.02.2008 14:21
von gnasen
Ich suche derzeit eine Möglichkeit, um ein Sprite (eigentlich ganz simpel) um die Y-Achse zu drehen. Also als ob man ein Blatt Papier auf die Vorder-, bzw. Rückseite dreht.
Dabei soll dies wie bei einer Animation möglich sein.
Vorder und Rückseite sind vorhanden, bräuchte dann halt einen Befehl wie DrehSprite(sprite, winkel)

Ideen waren:
TransformSprite3d: Ich Blick die Koordinatengebung nicht wirklich und weiss somit nichts damit anzufangen.

ClipSprite: War nur so eine Idee, müsste funktionieren, aber wie bin ich mir noch nicht so ganz sicher.

Deswegen einfach mal eine Frage an euch, wie ihr das machen würdet!

Verfasst: 22.02.2008 14:33
von STARGÅTE
wenn du kein 3D-Räumlichen effekt brauchst kannst du das ganz einfach mit ZoomSptite lösen:

Code: Alles auswählen

 ZoomSprite3D(#Vorn, Breit, Hoch*Cos(Winkel*#PI/180))
 DisplaySprite3D(#Vorn, x, y-Hoch*Cos(Winkel*#PI/180)/2)
 ZoomSprite3D(#Hinten, Breit, -Hoch*Cos(Winkel*#PI/180))
 DisplaySprite3D(#Hinten, x, y+Hoch*Cos(Winkel*#PI/180)/2)

Verfasst: 22.02.2008 17:10
von gnasen
Ich dachte ZoomSprite3D() dürfte nur in 2er Potenzen genutzt werden, wird zumindest immer wieder im Forum gesagt :roll:

(was ich damit sagen will 256 * 256 -> 128 * 128)

Verfasst: 22.02.2008 19:57
von Kaeru Gaman
nein.

das Basissprite, aus dem du das Sprite3D erzeugst, also die Texture,
das darf nur (2^n)² messen.

zoomen darfst du pixelgenau auf jede beliebige größe.

Verfasst: 22.02.2008 20:12
von gnasen
ahh vielen Dank, hilft mir in vielen Bereichen weiter, in denen ich bisher umständliche Dinge gebaut hab.

Kann ich denn ein 2^n quadrat großes Sprite Clippen und dann mit unquadratischen Stücken weiterarbeiten?

Verfasst: 22.02.2008 20:19
von Kaeru Gaman
nein. clipping ist eine reine 2D operation.

aber du kannst ein Bild rechteckig entwerfen, z.b. 700x300
und in nem Grafikprogramm, z.b. IrfanView, auf 512x512 resizen.
das nimmst du als texture/basissprite,
und mit ZoomSprite3D( Nr, 700, 300) sieht es fast genauso aus wie vorher.

oder du packst dein 700x300 auf ein 1024x1024 und definierst das drumrum als transparent.

Verfasst: 22.02.2008 21:41
von STARGÅTE
gnasen hat geschrieben:Ich dachte ZoomSprite3D() dürfte nur in 2er Potenzen genutzt werden, wird zumindest immer wieder im Forum gesagt :roll:

(was ich damit sagen will 256 * 256 -> 128 * 128)
jo ist richtig, aber ich glaube ein sollte ist hie besser:

Immer mehr "alte" Grafikkarten werden abgeschaltet, und bei neueren kannst du auch problemlos mit unsauberen Wertenarbeiten, ohne Probleme zu bekommen.

Aber nutze trotzdem zur Sicherheit die 2^n Grafiken

Verfasst: 23.02.2008 01:10
von Xaby
Also auf ATi-Karten, nVIDEA-Karten und selbst einigen NoName-NoteBook-Karten hatte ich jetzt noch nie Probleme, wenn ich meine Sprites 20 x 30 oder 100 x 90 oder sonst irgendwie definiert habe.

Wo es zu Problemen kommen kann ist, wenn du größere Sprites in komischen Formaten wählst.

Und so wie Stargate sagt, du kannst, wenn es sich aber vermeiden lässt, mach es nicht.

Bedenke auch! Mehrere kleinere Sprites können schneller sein als ein großes Sprite, was insgesamt genauso groß ist wie alle kleinen Sprites zusammen.

Hatte mal einen Test gemacht mit einem Sprite, was 640 x 480 war auf einer SIS-Notebook Grafikkarte und dieses Sprite mal aufgeteilt in 20 x 15 Sprites, die alle 32 x 32 groß waren und das war um einiges schneller.

Ich denke, Grafikkarten kommen heute zwar mit jeder Größe klar, schneller sind aber quadratische Größen. :allright:

Verfasst: 23.02.2008 04:16
von Kaeru Gaman
äh.. Xaby...

hier redet keiner von Sprites, sondern von Sprites3D, das sind genaugenommen 4-vektorige meshes.
für diese gab und gibt es teilweise immer noch die format-restriktionen.

für normale Sprites spielt das format (fast*) keine rolle.

(* es kann probleme bereiten, ein sprite clippen zu wollen, das größer als der screen ist)