create_cam_pose_look_at_point
— Erstellen einer 3D-Kamera-Pose aus Kamerazentrum und Blickrichtung.
create_cam_pose_look_at_point( : : CamPosX, CamPosY, CamPosZ, LookAtX, LookAtY, LookAtZ, RefPlaneNormal, CamRoll : CamPose)
Der Operator create_cam_pose_look_at_point
erstellt eine
3D-Kamera-Pose bezüglich eines Weltkoordinatensystems basierend auf
zwei Punkten und dem Kamerarollwinkel.
Der erste der beiden Punkte legt die Position des optischen Zentrums
der Kamera, d.h. den Ursprung des Kamerakoordinatensystems
fest. Seine drei Koordinaten werden in CamPosX
,
CamPosY
und CamPosZ
übergeben. Der zweite Punkt
legt die Blickrichtung der Kamera fest. Er wird ebenfalls durch
seine drei Koordinaten LookAtX
, LookAtY
und
LookAtZ
beschrieben. Folglich liegt der zweite Punkt auf
der z-Achse des Kamerakoordinatensystems.
Der verbleibende festzulegende Freiheitsgrad ist eine Rotation der
Kamera um ihre z-Achse, die auch als Kamerarollwinkel bezeichnet
wird. Um diese Rotation zu bestimmen, kann die Normale einer
Referenzebene in RefPlaneNormal
übergeben werden, die die
Referenzorientierung der Kamera festlegt. Bezüglich dieser
Referenzorientierung kann schließlich der Kamerarollwinkel in
CamRoll
angegeben werden. Der Kamerarollwinkel beschreibt
die Rotation der Kamera um ihre z-Achse relativ zur
Referenzorientierung.
Die Referenzebene kann als Ebene im Weltkoordinatensystem
interpretiert werden, die parallel zur x-Achse der Kamera (in der
Referenzorientierung, d.h. mit Kamerarollwinkel 0) liegt. In einer
alternativen Interpretation legt der Normalenvektor der
Referenzebene projiziert in die Bildebene die Richtung fest, die in
der Kamera oben ist. Der in die Bildebene projizierte Normalenvektor
zeigt somit in Richtung der negativen y-Achse des
Kamerakoordinatensystems. Der Parameter RefPlaneNormal
kann
einen der folgenden Werte annehmen:
Die Referenzebene ist die yz-Ebene des Weltkoordinatensystems. Die projizierte x-Achse des Weltkoordinatensystems zeigt in der Bildebene nach oben.
Die Referenzebene ist die yz-Ebene des Weltkoordinatensystems. Die projizierte x-Achse des Weltkoordinatensystems zeigt in der Bildebene nach unten.
Die Referenzebene ist die xz-Ebene des Weltkoordinatensystems. Die projizierte y-Achse des Weltkoordinatensystems zeigt in der Bildebene nach oben.
Die Referenzebene ist die xz-Ebene des Weltkoordinatensystems. Die projizierte y-Achse des Weltkoordinatensystems zeigt in der Bildebene nach unten.
Die Referenzebene ist die xy-Ebene des Weltkoordinatensystems. Die projizierte z-Achse des Weltkoordinatensystems zeigt in der Bildebene nach oben.
Die Referenzebene ist die xy-Ebene des Weltkoordinatensystems. Die projizierte z-Achse des Weltkoordinatensystems zeigt in der Bildebene nach unten.
Alternativ zu den obigen Werten kann in RefPlaneNormal
auch
ein beliebiger Normalenvektor angegeben werden, der nicht mit einer
Koordinatenachse übereinstimmt. Dazu kann ein Tupel mit den drei
Komponenten des Normalenvektors übergeben werden.
Es ist zu beachten, dass sich die Position des optischen Zentrums der Kamera und der Punkt, der die Blickrichtung der Kamera festlegt, unterscheiden müssen. Außerdem darf der Normalenvektor der Referenzebene nich parallel zur z-Achse der Kamera sein. Andernfalls ist die Kamera-Pose nicht eindeutig definiert.
create_cam_pose_look_at_point
ist vor allem für die
Visualisierung eines 3D-Objektmodells oder eines 3D-Formmodells von
einer bestimmten Kameraposition aus hilfreich. In diesem Fall kann
die mit create_cam_pose_look_at_point
generierte Pose an
project_object_model_3d
bzw. project_shape_model_3d
übergeben werden.
Es ist auch möglich, für unterschiedliche Parameter Tupel unterschiedlicher Länge zu übergeben. In diesem Fall wird intern zunächst die maximale Anzahl an übergebenen Werten über alle Eingabeparameter ermittelt. Dieser Wert bestimmt die Anzahl der zu berechnenden Kamera-Poses. Jeder Eingabeparameter kann dann einen einzelnen Wert oder genauso viele Werte wie Kamera-Poses enthalten. Im ersten Fall wird der Wert für die Berechnen aller Kamera-Poses verwendet, im zweiten Fall wird der jeweilige Wert im Eingabeparameter für die Berechnung der entsprechenden Kamera-Pose verwendet.
CamPosX
(input_control) real(-array) →
(real)
X-Koordinate des optischen Zentrums der Kamera.
CamPosY
(input_control) real(-array) →
(real)
Y-Koordinate des optischen Zentrums der Kamera.
CamPosZ
(input_control) real(-array) →
(real)
Z-Koordinate des optischen Zentrums der Kamera.
LookAtX
(input_control) real(-array) →
(real)
X-Koordinate des 3D-Punktes, in dessen Richtung die Kamera gerichtet ist.
LookAtY
(input_control) real(-array) →
(real)
Y-Koordinate des 3D-Punktes, in dessen Richtung die Kamera gerichtet ist.
LookAtZ
(input_control) real(-array) →
(real)
Z-Koordinate des 3D-Punktes, in dessen Richtung die Kamera gerichtet ist.
RefPlaneNormal
(input_control) string-array →
(string / real)
Normalenvektor der Bezugsebene (zeigt nach oben).
Defaultwert: '-y'
Werteliste: '-x' , '-y' , '-z' , 'x' , 'y' , 'z'
CamRoll
(input_control) angle.rad(-array) →
(real)
Kamerarollwinkel.
Defaultwert: 0
CamPose
(output_control) pose(-array) →
(real / integer)
3D-Lage der Kamera.
Sind die Parameterwerte korrekt, dann liefert
create_cam_pose_look_at_point
den Wert 2 (H_MSG_TRUE). Gegebenenfalls
wird eine Fehlerbehandlung durchgeführt. Wenn die Parameter so
gewählt worden sind, dass die 3D-Lage der Kamera nicht eindeutig
definiert ist, wird die Fehlermeldung 8940 zurückgegeben.
convert_point_3d_spher_to_cart
3D Metrology