Hallo,
ich hatte diese Frage
schon einmal gestellt, sie jedoch damals falsch formuliert, bzw einen falschen Ansatz gewählt.
Ich programmiere an einem 2D Spiel, bei dem lediglich der Untergrund einen leichten 3D Effekt erhalten soll, indem er die untere Bildkante ein bisschen breiter ist als die obere.
Hier (bzw falls Link noch gültig, dann auch nach diesem Absatz
) ist noch einmal eine Skizze, wie ich es mir vorgestellt hatte. Die Sprites, die auf den Boden draufgezeichnet werden, platziere ich dann selbst, sie sollen in ihrer Größe nicht verändert werden. Ich muss dabei nur wissen, um welchen Faktor die obere Bildkante kürzer ist als die untere.
http://img96.imageshack.us/img96/6106/trapez.th.jpg
Meine Idee war zuerst, ein Vertex zu benutzen, bei dem ich die oberen beiden Eckpunkte ein Stück in die Bildschirmmitte verschiebe und die beiden unteren bündig an den Bildschirmrand setze. Der Boden, bzw die Textur die darauf gezeichnet wird, soll dann gestreckt werden. Allerdings funktioniert das so nicht, in der Mitte entsteht beim Zeichnen ein Knick. Der Übergang vom oberen rechten Dreieck zum unteren linken ist nicht fließend. Jetzt weiß ich garnicht, ob sich das so überhaupt realisieren lässt. Hier noch eine Skizze, wie es bisher aussieht (auch im Anhang).
http://img6.imageshack.us/img6/3595/resultbh.th.jpg
Eine Alternative, die mir schon in meinem alten Thread vorgeschlagen wurde, wäre, die Boden-Textur zunächst auf ein Rechteck zu zeichnen und dieses dann ein Stück weit nach hinten zu kippen, also tatsächlich 3D zu zeichnen. Hier hab ich ein paar Probleme und weiß nicht, ob ich das so einfach machen kann. Denn:
- Ich möchte noch 2D Sprites oben drüber zeichnen
- Mein Untergrund besteht aus mehreren Schichten (in den oberen Schichten sind halbtransparente Stellen, durch die man die Schicht darunter sehen soll)
- Ich benötige den Faktor, um den die obere Bildkante schmaler ist als die untere, um die Sprites oben drauf richtig zu platzieren
Meine Frage ist jetzt: Kennt jemand eine Möglichkeit, diesen Kipp-Effekt mit der oberen Herangehensweise (durch ein Vertex in Trapezform) zu realisieren? Falls das so nicht geht und die zuletzt geschilderte Möglichkeit (Kippen eines Rechtecks) funktionieren sollte - hat jemand ein paar Links oder Codeausschnitte, wie ich das realisieren kann?
Ich bin auch für jeden weiteren Vorschlag sehr dankbar.
/Edit: ich arbeite mit DirectX9
Vielen Dank für jegliche Hilfe!
Gruß Xoric
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen