object_model_3d_to_xyzT_object_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz — Transformieren eines 3D-Objektmodells in Bilder.
Es gibt drei mögliche Transformationsmethoden, die über den Parameter
TypeTypeTypeTypetypetype ausgewählt werden. Zu beachten ist, dass nur im Modus
'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces" mehr als ein 3D-Objektmodell in
ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d übergeben werden kann. Alle anderen Modi
verlangen genau ein 3D-Objektmodell.
Die internen Kameraparameter CamParamCamParamCamParamCamParamcamParamcam_param beschreiben die
Art der Projektion (siehe Kalibrierung).
Die PosePosePosePoseposepose wird in der Form
erwartet. Dabei steht
ccs für das Kamerakoordinatensystem und
mcs für das Modellkoordinatensystem (ein 3D
Weltkoordinatensystem), siehe auch Transformationen / Posen und
„Solution Guide III-C - 3D Vision“.
Folglich beschreibt die Pose die Position und Orientierung des
Modellkoordinatensystems zum Kamerakoordinatensystem.
Die X-, Y- und Z-Koordinaten der transformierten Punkte werden jeweils
in das entsprechende Ausgabebild an die projizierte Stelle geschrieben.
Werden mehrere Punkte auf die selbe Bildkoordinate projiziert, so wird
nur der Punkt mit dem kleinsten Z-Wert in die Bilder geschrieben.
Die Größe der Bilder wird durch die Kameraparameter festgelegt.
Die zurückgegebenen Bilder zeigen das Objekt so wie es von der Kamera
unter der entsprechenden Pose gesehen werden würde.
Diese Transformationsmethode ist nur verwendbar, wenn die 3D-Objektmodelle
Flächen (Dreiecke oder Polygone) enthalten. Andernfalls wird das
3D-Objektmodell ohne Flächen unberücksichtigt.
Wenn eines der 3D-Objektmodelle Polygone enthält, werden diese intern zunächst
in Dreiecke umgewandelt. Diese Umwandlung kann schon vorher durchgeführt
werden, um diesen Operator zu beschleunigen.
Dafür kann read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3dread_object_model_3d mit
GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name'convert_to_triangles'"convert_to_triangles""convert_to_triangles""convert_to_triangles""convert_to_triangles""convert_to_triangles" auf
'true'"true""true""true""true""true" gesetzt verwendet werden, um alle Polygone in Dreiecke
zu konvertieren.
Alternativ kann triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3dtriangulate_object_model_3d zur Erstellung
der Oberflächendreiecke aufgerufen werden.
Die Flächen der Modelle werden zunächst mit der übergebenen
PosePosePosePoseposepose transformiert. Anschließend werden sie mittels der
in CamParamCamParamCamParamCamParamcamParamcam_param übergebenen Kameraparameter in ein Bild
projiziert, wobei die 3D-Information (X-, Y- und Z-Koordinaten) in
den Pixeln weiterhin enthalten bleibt. Mehr Details zu
CamParamCamParamCamParamCamParamcamParamcam_param und PosePosePosePoseposepose finden sich auch im
Abschnitt 'cartesian'"cartesian""cartesian""cartesian""cartesian""cartesian".
Werden mehrere Flächen auf dieselbe Bildkoordinate projiziert, so wird
nur der Wert mit dem kleinsten Z-Wert in die Bilder geschrieben.
Die Größe der Bilder wird durch die Kameraparameter festgelegt.
Die zurückgegebenen Bilder zeigen die Objekte so, wie sie von der Kamera
unter der entsprechenden Pose gesehen werden würden.
Sind OpenGL 2.1, GLSL 1.2 und die OpenGL
Extensions GL_EXT_framebuffer_object und GL_EXT_framebuffer_blit
verfügbar, ist die Verarbeitungsgeschwindigkeit höher.
Diese Transformationsmethode arbeitet genauso wie die Methode
'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces", verwendet aber kein OpenGL.
In der Regel ermittelt 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces" automatisch, ob
OpenGL verwendet werden kann.
'cartesian_faces_no_opengl'"cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl" muss daher normalerweise nicht
explizit verwendet werden, kann aber in Fällen, in denen die OpenGL-
Variante (z.B. aufgrund von Treiberproblemen) zu Fehlern führt,
nützlich sein.
Kameras mit hyperzentrischen Objektiven werden nicht unterstützt.
Falls CamParamCamParamCamParamCamParamcamParamcam_param Verzeichnungskoeffizienten ungleich null
enthält ist bei der Projektion großer Dreiecke oder Polygone
darauf zu achten, dass die Verzeichnung nur auf die Punkte des
Objektmodells angewandt werden. In der Projektion werden diese
wiederum mit geraden Linien verbunden. Für eine gute
Approximation der verzeichneten Linien sollte eine Triangulierung
mit ausreichend kleinen Dreiecken verwendet werden.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
object_model_3d_to_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz liefert den Wert TRUE wenn alle
Parameter korrekt sind.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.