]> git.tdb.fi Git - libs/vr.git/blobdiff - source/headtrackingcamera.cpp
Move some common calculations to base classes
[libs/vr.git] / source / headtrackingcamera.cpp
diff --git a/source/headtrackingcamera.cpp b/source/headtrackingcamera.cpp
new file mode 100644 (file)
index 0000000..95868e2
--- /dev/null
@@ -0,0 +1,24 @@
+#include "headtrackingcamera.h"
+
+namespace Msp {
+namespace VR {
+
+HeadTrackingCamera::HeadTrackingCamera(const GL::Camera &c):
+       base_camera(c)
+{ }
+
+void HeadTrackingCamera::update_from_matrix(const GL::Matrix &hmd_matrix)
+{
+       GL::Matrix matrix = base_camera.get_object_matrix()*hmd_matrix;
+
+       set_position(matrix*GL::Vector3());
+       set_look_direction((matrix*GL::Vector4(0, 0, -1, 0)).slice<3>(0));
+       set_up_direction((matrix*GL::Vector4(0, 1, 0, 0)).slice<3>(0));
+
+       set_depth_clip(base_camera.get_near_clip(), base_camera.get_far_clip());
+       set_field_of_view(base_camera.get_field_of_view());
+       set_aspect(base_camera.get_aspect());
+}
+
+} // namespace VR
+} // namespace Msp