]> git.tdb.fi Git - libs/vr.git/blobdiff - source/stereoview.h
Use matrices for eye offsets instead of a simple spacing
[libs/vr.git] / source / stereoview.h
index 911f5f8f1ffd922984d4c705782f07c7af9cdc7f..bc9073ed5808ebf8e9802bdbd92f21d673fd584f 100644 (file)
@@ -11,6 +11,7 @@
 namespace Msp {
 namespace VR {
 
+class HeadTrackingCamera;
 class StereoCombiner;
 
 class StereoView
@@ -36,28 +37,34 @@ private:
        struct Eye
        {
                mutable GL::Camera camera;
+               GL::Matrix offset_matrix;
                RenderTarget *target;
 
                Eye();
 
                void create_target(unsigned, unsigned);
-               void setup_frame(const GL::Camera &, const GL::Vector3 &, float, const EyeParams &) const;
+               void setup_frame(const GL::Camera &, float, const EyeParams &) const;
                void render(const GL::Renderable &) const;
        };
 
+       const StereoCombiner &combiner;
        const GL::Camera &base_camera;
-       const GL::Renderable &renderable;
-       const StereoCombiner *combiner;
+       HeadTrackingCamera *head_camera;
+       const GL::Renderable *content;
        Eye left;
        Eye right;
-       float eye_spacing;
        Geometry::Angle<float> strabismus;
 
 public:
-       StereoView(const GL::Camera &, const GL::Renderable &, const StereoCombiner &);
+       StereoView(const StereoCombiner &, const GL::Camera &);
+       StereoView(const StereoCombiner &, HeadTrackingCamera &);
+private:
+       void init();
 
-       void set_combiner(const StereoCombiner &);
+public:
+       void set_content(const GL::Renderable *);
        void set_eye_spacing(float);
+       void set_eye_matrices(const GL::Matrix &, const GL::Matrix &);
        void set_strabismus(const Geometry::Angle<float> &);
 
 private: