Hi!
Ich suche einen Algorithmus, mit dem man dreidimensionale Raumkoordinaten auf eine zweidimensionale Bildschirmfläche projizieren kann. Im Klartext also:
Ich will einen Punkt P(x|y|z) auf einer zweidimensionalen Bildschirmebene als ein Pixel F(x|y) darstellen. Ich suche eine Funktion f(x, y, z), die die Koordinaten x und y für den Punkt F zurückgibt.
Danke im Voraus,
Johannes
Ich will einen Punkt P(x|y|z) auf einer zweidimensionalen
Bildschirmebene als ein Pixel F(x|y) darstellen. Ich suche
eine Funktion f(x, y, z), die die Koordinaten x und y für den
Punkt F zurückgibt.
Am besten Du simulierst eine Lochkamera mit einem Okular im Kordinatenursprung, deren Schirm in der Ebene (x,y,-f) liegt, wobei f die Brennweite ist. Die Umrechung der Weltkoordinaten (x,y,z) in die Bildkoordinaten (x’,y’) erfolgt dann gemäß
x’ = x*f/z
y’ = y*f/z
Die feste Position der Kamera ist natürlich eine Einschränkung, die aber behoben werden kann, indem man Anstelle der Kamera die gesamte Szene bewegt. Dazu definiert man eine Transforationsmatrix in der die Bewegungen der Kamera in umgekehrter Reihenfolge und mit umgekehrtem Vorzeichen durchgeführt werden und multipliziert damit alle Vektoren, bevor man sie von Welt- in Bildschirmkoordninaten umrechnet.
Die Projektion wurde schon beschrieben durch meinen Vorredner.
Ich habe an der Berufsakademie im letzten Semester sowas programmieren müssen, eine 3D Simulation, das geht bei mir in 3 Schritten
- Welt in Sichtkoordinaten (Kamera frei bewegbar)
- Sichtkoordinaten in normierte Koordinaten (das was mein Vorredner beschrieben hat)
- Normierte Koordinaten in Bildschirmkoordinaten (wo die Leinwand links oben anfängt und eine bestimtme Grösse hat).
Wenn du willst, kann ich dir dazu meine Dokumentation schicken (ca. 250kB) als .pdf… Sie enthält eine Beschreibung desganzen und auch den Quellcode für Java.
Gruß
Bruno
Danke für deine (eure) Antwort(en)!
Ich hab’s gleich ausprobiert und es funktioniert genau so wie ich es mir vorgestellt habe! Wenn du mir auch noch deinen Java-Sourcecode mailen könntest ([email protected]), fände ich das super!
Merci beaucoup!
Johannes
Doku und Programm sind unterwegs (o.T.)