AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectX - Rechteck kippen / an einer Seite strecken
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX - Rechteck kippen / an einer Seite strecken

Ein Thema von XoRiC · begonnen am 16. Mär 2010 · letzter Beitrag vom 17. Mär 2010
Antwort Antwort
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

DirectX - Rechteck kippen / an einer Seite strecken

  Alt 16. Mär 2010, 11:21
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
Miniaturansicht angehängter Grafiken
result_109.jpg  
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen
  Mit Zitat antworten Zitat
drboon

Registriert seit: 5. Okt 2008
2 Beiträge
 
#2

Re: DirectX - Rechteck kippen / an einer Seite strecken

  Alt 16. Mär 2010, 18:42
Du hast doch schon die oberen Vertices zueinander geschoben, indem du die X-Koordinaten angepasst hast. Um das Objekt zu drehen könntest du das gleiche entweder 1) genauso mit den Z-Koordinaten machen oder 2) das Objekt aus der Ausgangsposition mit einer Rotationsmatrix drehen (s. D3DXMatrixRotationAxis).

Ich würde dir letzteres von beiden raten, da man Vertices i.d.R. nicht per Hand transformiert.

Beispielhaft könnte das so aussehen:

1. D3DXMatrixRotationAxis aufrufen und
2. diese Matrix mit SetTransform als Weltmatrix setzen.
3. Das Rechteck wie gewohnt zeichnen und darstellen.

Falls das mit der Transformation nicht klar sein sollte, solltest du dich erstmal mit Matrizen auseinandersetzen und die Einsteigertutorials aus dem DirectX SDK durchgehen.
  Mit Zitat antworten Zitat
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: DirectX - Rechteck kippen / an einer Seite strecken

  Alt 17. Mär 2010, 20:12
Hi drboon!

Vielen Dank für den Tipp und die beiden MSDN Links, ich denke ich werd damit klarkommen. Musste nur feststellen, dass ich im Moment noch rhw Vertexe verwende und die Z-Koordinate bei meinem bisherigen Code überhaupt keinen Einfluss nimmt.

Delphi-Quellcode:
type
  TMyVertex = record
    x, y, z, rhw: Single;
    U, V: Single;
  end;
Jetzt muss ich mir erst mal anschauen welche Vertexe ich brauche und was ich im Device und den sonstigen Einstellungen noch verändern muss. Dann werde ich so verfahren wie du es mir beschrieben hast.

Vielen Dank nochmal!
Gruß Xoric
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz