params.near_clip = base_camera.get_near_clip();
params.far_clip = base_camera.get_far_clip();
- left.setup_frame(base_camera, offset_axis*-eye_spacing, params);
- right.setup_frame(base_camera, offset_axis*eye_spacing, params);
+ float frustum_skew = combiner->get_frustum_skew();
+
+ left.setup_frame(base_camera, offset_axis*-eye_spacing, frustum_skew, params);
+ right.setup_frame(base_camera, offset_axis*eye_spacing, -frustum_skew, params);
renderable.setup_frame();
}
target = new RenderTarget(w, h);
}
-void StereoView::Eye::setup_frame(const GL::Camera &base_camera, const GL::Vector3 &offset, const EyeParams ¶ms) const
+void StereoView::Eye::setup_frame(const GL::Camera &base_camera, const GL::Vector3 &offset, float frustum_skew, const EyeParams ¶ms) const
{
camera.set_position(base_camera.get_position()+offset);
camera.set_up_direction(base_camera.get_up_direction());
camera.set_field_of_view(params.fov);
camera.set_aspect(params.aspect);
camera.set_depth_clip(params.near_clip, params.far_clip);
+ camera.set_frustum_axis(frustum_skew, 0);
}
void StereoView::Eye::render(const GL::Renderable &renderable, const GL::Tag &tag) const