Umrechnung zwischen Bildschirm und Weltkoordinaten

Status
Nicht offen für weitere Antworten.

h0b0

Mitglied
Ich versuche, einen Faktor zu berechnen, mit dem ich in einer Parallelprojektion einen Pixelabstand auf der Canvas3D in einen Vektor im Weltkoordinatensystem umrechnen kann. Allerdings liegt mein Ergebnis immer um einen konstanten Faktor neben dem mit einer Pick-Canvas ermittelten korrekten Wert. Diesen gleiche ich im Moment mit der Konstanten LINEARE_ABWEICHUNG mehr schlecht als recht aus. Wie diese Konstante zustande kommt, ist mir allerdings ein Rätsel.
Hat jemand eine Idee, was ich nicht berücksichtigt habe?
Code:
final double  LINEARE_ABWEICHUNG = 1.30479102956167;
double ratio = myCanvas3D.getPhysicalWidth() / myCanvas3D.getWidth();
double pixelToMeters = (ratio * LINEARE_ABWEICHUNG) / (myCanvas3D.getView.getScreenScale());
 

Marco13

Top Contributor
Ich habe mich vor einiger Zeit mit ähnlichen Problemen rumschlagen müssen, und seitdem hasse ich das View-Model von Java3D aber das ist auch schon das richtige Stichwort: Wenn du das in Weltkoordinaten umrechnen willst, wirst du wohl vermutlich irgendwie die View mit einbeziehen müssen. Das myCanvas3D.getPhysicalWidth() liefert (soweit ich mich erinnere!) die Breite des Canvas auf dem Bildschirm (ja, auf dem Computermonitor - abhängig von irgendeiner obskuren Auflösung, 72 dpi oder so).

Ganz allgemein würde ich es so versuchen:

Du hast zwei Positionen, die in Pixel-Koordinaten gegeben sind. Diese kannst du mit
canvas.getPixelLocationInImagePlate(Point2d pixelLocation, Point3d imagePlatePoint)
umrechnen in Punkte in Image-Plate-Koordinaten. Und die Image-Plate-Koordinaten kannst du mit der Transform3D, die du mit
canvas.getImagePlateToVworld(Transform3D t)
erhältst, umrechnen in Weltkoordinaten. Der Abstand zwischen diesen Punkten müßte dann der gesuchte sein...

Viel Spaß noch :wink:
 
G

Guest

Gast
Ich sitze gerade an einem ähnlichen Problem, hänge es daher mal in diesen Thread ein.

Ich möchte eigentlich nur bei einem Klick auf mein Canvas3D wissen, welchem Punkt auf der z=0-Ebene das in meinem Universe entspricht.

Mein eigentlicher Ansatz war:
Code:
Vector3f position (Kameraposition)
Canvas3D canv (Das 3D-Canvas)
...
Vector3f((float)(((float)px/canv.getWidth())*canv.getPhysicalWidth()+position.getX()),
(float)(((float)py/canv.getHeight())*canv.getPhysicalHeight()+position.getY()),
0f)

Tatsächlich gibt es einen kleinen Unterschied zwischen einem Klick am linken und einem am rechten Canvasrand, doch ist der viel zu klein; die Koordinaten sind falsch.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Zwischen A* und Luftlinie switchen Spiele- und Multimedia-Programmierung 9
S Kollisionsabfrage zwischen Rechteck und Polygon Spiele- und Multimedia-Programmierung 1
E LWJGL Switchen zwischen gluOrtho und gluPerspective Spiele- und Multimedia-Programmierung 0
Androbin Kollision zwischen Raster und Nicht-Raster Spiele- und Multimedia-Programmierung 2
C Kollision zwischen 2 Kreisen Spiele- und Multimedia-Programmierung 3
aze Schnittmenge zwischen Linie und einer Area wegschneiden Spiele- und Multimedia-Programmierung 3
P Störender Lag zwischen 2 Clips Spiele- und Multimedia-Programmierung 11
F Winkel zwischen Vektoren Spiele- und Multimedia-Programmierung 5
H Wie erzeuge ich eine Zufallszahl zwischen 0 und 8 ? Spiele- und Multimedia-Programmierung 7
V Winkel zwischen zwei Vektoren Spiele- und Multimedia-Programmierung 1
C Objekt zwischen 2 Geraden? Spiele- und Multimedia-Programmierung 3
M Asteroids Clone: Kollision zwischen Schuss und Feind Spiele- und Multimedia-Programmierung 13
W Graphik über den Bildschirm legen (Windows) Spiele- und Multimedia-Programmierung 9
B Intro-Bildschirm vor Spielbeginn Spiele- und Multimedia-Programmierung 3
D Vertex zu Bildschirm Coordinate ermitteln? Spiele- und Multimedia-Programmierung 3
C "fließender Bildschirm" Spiele- und Multimedia-Programmierung 6
T Problem mit Maus und Bildschirm Spiele- und Multimedia-Programmierung 3
I jPCT rendert nur einen schwarzen Bildschirm Spiele- und Multimedia-Programmierung 2
N Shape3D Objekt auf dem Bildschirm zentrieren Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen


Oben