# 3D Punkt in 2D umrechnen



## Surma (5. Juli 2004)

Hallo,
ich bin gerade auf Lanzarote in einem sauteuren Internetcafe, und hatte nicht viel Zeit zu googlen, und hab auf die schnelle nichts gefunden. Verzeiht mir also bitte.
Ich muss (Auftrag) einen 3D-Punkt auf 2D Abbilden (Also eignetlich ganze Polygonkoerper)
Ich meinte mich dunkel zu erinnern das das wie folgt geht.
x`=x/z
y`=y/z

das kommt der loesung nahe, aber als ich einen Wuerfel umgerechnet habe, war das nicht so wirklich ein Wuerfel mehr, eher ein Quader...
Wie gehts richtig?

MfG
Crock


----------



## Thomas Darimont (5. Juli 2004)

Hallo!

Kann es sein, dass du noch das Seitenverhältnis mit einkalkulieren musst?

Z.Bsp.: 1024/768 -> 4 / 3 ....

Gruß Tom


----------



## Surma (6. Juli 2004)

naja, eher nicht...
ich arbeite gerade nur auf einem 800x800 Bild... ich hab das Gefuehl, das dieser besagte Quader genau doppelt so tief ist, wie er sein soll... ich werd heute Mittag das nochmal nachbauen, vielleicht durch 2? Es gibt da eine Formel, ich hab das Buch sogar zuhause, aber eben nicht hier... naja, vielleicht kennt sie ja einer (Mir faellt gerade ein, es stand in dem Buch "3D-Spiele-Programmierung" von David Scherfgen, ein DirectX Einsteigerbuch)

MfG
Crock


----------



## squeaker (6. Juli 2004)

Abbildungen von 3D nach 2D gibt es wie Sand am Meer. Die einfachste dürfte sein, einfach eine Koordinate wegzulassen (entspricht der senkrechten Projektion auf eine der Ebenen die durch die verbleibenden Koordinatenachsen gebildet wird).


----------



## Matthias Reitinger (6. Juli 2004)

Sagt dir der Strahlensatz was, Crock? Damit kannst du ganz einfach die Abbbildung auf eine Ebene herleiten... siehe Anhang!

Links ist der Betrachter, das in der Mitte ist die Projektionsebene und das ganz rechts ist ein abzubildendes Objekt im dreidimensionalen Raum (hergeleitet wird die Abbildung des oberen Punktes P auf P', was man aber natürlich auf alle Raumpunkte anwenden kann.)


----------



## Surma (6. Juli 2004)

dann ist d also die Z-Kooridnate?
Weil die Anwendung auf mein Problem versteh ich leider nicht, auch wenn ich weis, dass das die Loesung ist 

Vielleicht kannst du dir die Meueh machen, mir das noch zu erklaeren? oder wie genau ist f auf eine PC-Grafik anzuwenden?

Danke, und ioc bin ein bisschen bloed (z.Z  )
Crock

PS: Das Internetcafe war schelcht geschuetzt, ich kann jetzt umsonst surfen


----------



## Matthias Reitinger (6. Juli 2004)

d ist der Abstand deines Punktes von der Projektionsebene. Wenn du selbige zufälligerweise als z=0 wählst, dann ist d die z-Koordinate, ja 

f ist der Abstand des Betrachters von der Projektionsebene. Da musst du ein bisschen rumprobieren, um auf einen annehmbaren Wert zu kommen. Der Abstand von der Projektionsebene beeinflusst auch dein FOV = Field of View. Ist deine Projektionsfläche beispielsweise 100 LE breit, und du befindest dich 50 LE vor dieser Ebene, so hast du ein FOV von 90°.


----------



## Matthias Reitinger (6. Juli 2004)

Vielleicht noch ein Bild zur Veranschaulichung... die ganze Situation von oben.

Wenn du jetzt das entsprechende f für ein gegebenes alpha berechnen willst, musst du einfach nach f auflösen und einsetzen...


----------



## Surma (9. Juli 2004)

*an-die-stirn-klatsch*
*vormatthias-nieder-knie*

jo, ich habs nun auch hingekriegt. werd mir gleich mal n simples Programm bauen, wo ein Wuerfel gezeichnet wird, und manndie Werte verstellen kann.

Ach ja, in gewisser Weise entspricht d der Z-Koordinate. 
Mit d hab ich jetzt festgelegt, wo mein 3D-Koordiantesystem anfaengt.
(z.B. 10 E hinter der Projektionsflaeche). Somit ist d = 10+z;
wenn du es nicht so meintest, ist es mir nun wurscht (nicht persoenlich nehmen), denn es geht ja.
Vielen Dank, den Post werd ich linken 

MfG
Crock


----------



## Surma (17. Juli 2004)

Um das Ganze noch mal kurz aufleben zu lassen,
fuer die Leute, die erstmal damit nichts anfangen konnten, hab ich waehrend meines Urlaubs folgendes Programm geschrieben, nicht sehr komplex, aber ganz lustig zum Spielen!
http://www.crocks-level.de/tst/CrockRenderer.jar  (jaja, n bisschen eubertrieben der Name  )


----------

