2017-11-09 2 views
0

Ich habe 3 * 4 Camera Matrix, die P = K[R | -RC] ist, wo K intrinsische ist Kameramatrix, R ist Rotationsmatrix ist C Kameraposition in Bezug auf Weltursprung und -RC Übersetzung wird. Ich kann P zu K, R und C zerlegen. Wie ich in OpenGL mit dieser Kamera Informationen rendern möchte. Wie soll ich View Matrix und Projection Matrix unter Verwendung von K, R, C; in OpenGL so, dass es die tatsächliche Kameraposition darstellt?Get Projection and View Matrix aus Kamera Matrix

Antwort

1

In OpenGL alle Matrizen sind 4x4 homogene Transformationen, wie unten beschrieben:

[Xx][Yx][Zx][Tx] 
[Xy][Yy][Zy][Ty] 
[Xz][Yz][Zz][Tz] 
[Xw][Yw][Zw][Tw] 

Kamera Matrix und Ansicht Matrix ist die gleiche Sache, und von einem „up“ Vektor, ein „Ort“ Vektor konstruiert und ein "Richtungs" -Vektor.

Von diesen Vektoren, können Sie die Ansicht Matrix berechnen:

vec3 Z = Eye - Location; //this is your "forward" vector 
Z.Normalize(); 
vec3 Y = Up; 
vec3 X = Y.Cross(Z); //crossing Y with Z gives you a perpendicular vector, which is needed to construct a coordinate basis matrix 

Sie dann Konstruieren Sie die Matrix etwa so:

[Xx][Yx][Zx][-X.Dot(Eye)] 
[Xy][Yy][Zy][-Y.Dot(Eye)] 
[Xz][Yz][Zz][-Z.Dot(Eye)] 
[Xw][Yw][Zw][1.0] 

Dann haben Sie die Ansicht Matrix

Ihre Projektionsmatrix steht in keinem Zusammenhang mit diesen Daten und stellt die Sicht/Welt für die Bildschirmraumtransformation dar und hängt von Ihren Bildschirmabmessungen, dem Sichtfeldwinkel und naheabweit Clipping-Bereiche.

Von meinem Kopf kann ich mich nicht erinnern, wie man die Projektionsmatrix aus diesen Daten berechnet, also werde ich einfach empfehlen, wenn Sie Ihren GL arbeiten mit C++, dass Sie herunterladen und verwenden Sie die GLM mathematics Bibliothek , die diese gemeinsamen Funktionen bereits geschrieben haben.

Verwandte Themen