# 2D - Bild um y-Achse drehen



## MathiasBauer (5. Jan 2009)

Hallo,

ich habe ein Problem, was für euch hoffentlich keins ist:

Im Moment drehe ich ein Bild so:


```
Graphics2D g2 = (Graphics2D) g; 
BufferedImage sourceBI = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.rotate(45.0 * Math.PI / 180.0, sourceBI.getWidth() / 2.0, sourceBI.getHeight() / 2.0);
g2.setTransform(at);
g2.drawImage(image, 10, 10, this);
```

Ich möchte jedoch das Bild nach hinten (über die y-Achse) drehen. Wie kann ich das am Besten umsetzen? Vielen Dank im Voraus.


----------



## 0x7F800000 (5. Jan 2009)

wie jetzt? in die tiefe? So als würdest du den bildschirm nach innen eindrücken? ???:L
Ich würd mal spontan sagen: mit Graphics2D geht das nicht, Affine transformation ist das nicht mehr.

Brauchst du das für echtzeit? Dann würde ich eher dazu raten, sich irgendeine 3D API anzuschauen, große Texturen verzerrungsfrei perspektivisch darzustellen ist eine ziemlich rechenintensive angelegenheit, da sollte die grafikkarte mit hardwarebeschleunigung dran.

Wenn das nicht zeitkritisch ist, könntest du dir die Projektion selber zusammenbasteln, das wäre schnell genug, aber recht aufwendig zu schreiben, diese software-rasterizing-geschichten sind zwar nicht allzu schwer, aber da hat man was zu schreiben, das ist keine Sache für eine Stunde... Würde ich nur empfehlen, wenn du am Thema interessiert bist, und nicht nur so schnell wie möglich ein egebnis haben willst.


----------



## MathiasBauer (5. Jan 2009)

Vielen Dank für die schnelle Antwort.

Mir ist schon klar, dass das mit 3D einfach zu lösen wäre. Jedoch kann und möchte ich nicht 3D einsetzen. 

Ich möchte das, um eine Spielkarte aufzudecken. Es soll den Anschein haben, dass sie sich aufdreht. D.h. sie dreht sich um die Y-Achse. Aber nur dem Anschein nach.


----------



## Quaxli (5. Jan 2009)

Dann würde ich überlegen, die Animation als Einzelbildsequenz zu hinterlegen und nicht extra berechnen lassen. 
Evtl. könntest Du ja die Farben der Karten vom Programm ändern lassen, so daß Du jede Animation nur einmal pro Karte benötigst und nicht auch noch je Farbe.


----------



## MathiasBauer (5. Jan 2009)

Mit der Einzelbildsequenz könnte das gehen.

Aber bei der Anzahl von Karten (alle sind verschieden)...


----------



## Marco13 (5. Jan 2009)

Wenn es keine Perspektivische Verzerrung gibt, sieht eine Rotation um die x-Achse ("über die y-Achse"?) IMHO schlicht und einfach so aus, als ob die Karte, die Am Anfang die höhe 100 hat, langsam auf Höhe 0 skaliert wird, und danach (ihre Rückseite) wieder zurück auf höhe 100....


----------



## 0x7F800000 (5. Jan 2009)

So eine Illusion kriegst du aber auch mit gewöhnlichen Affinen Transformationen hin, nur sieht es dann halt so aus, als würdest du mit einem sehr starken teleskop von ganz weit draußen auf die Karte herunterschauen. Dass die Perspektivische Verzerrung fehlt macht bei einer Karte doch gar nichts aus, würde auch mit gewöhnlichen Scherungen gut aussehen. Brauchst also nichts 3D: arbeite mit Scherungen.


----------



## MathiasBauer (5. Jan 2009)

Folgenden Vorschlag hatte mein Professor:

2 Bilder nebeneinenader. Das 1. Bild hat eine Breite von 0, das andere 100. Dann langsam das 1. Bild hochskalieren.

Das könnte klappen, oder was meint ihr?


----------



## Marco13 (5. Jan 2009)

Wäre nett, wenn mir jemand erläutern würde, wo der Unterschied zu dem ist, was ich beschrieben habe (modulo vertauschter Breite und Höhe)


----------



## MathiasBauer (5. Jan 2009)

Du hast völlig recht. Das hast du schon beschrieben...

Vielen Dank!


----------

