Spriterotation um die Y-Achse

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Spriterotation um die Y-Achse

Beitrag 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!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag 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)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag 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?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten