cgv
view.h
1 #pragma once
2 
3 #include <cgv/math/fvec.h>
4 #include <cgv/math/fmat.h>
5 #include <cgv/defines/deprecated.h>
6 #include "lib_begin.h"
7 
8 namespace cgv {
9  namespace render {
10 
11  class context;
12 
21 class CGV_API view
22 {
23 public:
28 protected:
32  dvec3 view_up_dir;
34  dvec3 view_dir;
36  double y_view_angle;
38  double y_extent_at_focus;
39 public:
41  view();
42 
45 
47  const dvec3& get_focus() const;
49  virtual void set_focus(const dvec3& foc);
50  void set_focus(const vec3& foc) { set_focus(dvec3(foc)); }
52  void set_focus(double x, double y, double z);
54  dvec3& ref_focus();
55 
57  const dvec3& get_view_dir() const;
59  virtual void set_view_dir(const dvec3& vd);
60  void set_view_dir(const vec3& vd) { set_view_dir(dvec3(vd)); }
62  void set_view_dir(double x, double y, double z);
64  dvec3& ref_view_dir();
65 
67  const dvec3& get_view_up_dir() const;
69  virtual void set_view_up_dir(const dvec3& vud);
70  void set_view_up_dir(const vec3& vud) { set_view_up_dir(dvec3(vud)); }
72  void set_view_up_dir(double x, double y, double z);
74  dvec3& ref_view_up_dir();
76  double& ref_y_extent_at_focus();
77 
79  double get_y_view_angle() const;
81  virtual void set_y_view_angle(double angle);
83  double get_y_extent_at_focus() const;
85  virtual void set_y_extent_at_focus(double ext);
87  double& ref_y_view_angle();
89 
92  double get_tan_of_half_of_fovy(bool ensure_non_zero) const;
95  double get_y_extent_at_depth(double depth, bool ensure_non_zero) const;
97  double get_depth_of_focus() const;
99 
101  void put_coordinate_system(dvec3& x, dvec3& y, dvec3& z) const;
102  void put_coordinate_system(vec3& x, vec3& y, vec3& z) const;
104 
105  int compute_axis_and_angle(const dvec3& target_view_dir, const dvec3& target_view_up_dir, dvec3& axis, double& angle);
107  bool is_parallel() const;
109 
111  const dvec3 get_eye() const;
113 
116  bool set_eye_keep_extent(const dvec3& eye);
118 
121  bool set_eye_keep_view_angle(const dvec3& eye);
123  void view_look_at_keep_view_angle(const dvec3& eye, const dvec3& foc, const dvec3& vud);
125  void view_look_at_keep_extent(const dvec3& eye, const dvec3& foc, const dvec3& vud);
127 
130  void roll(double angle);
133 
138  void rotate(double axis_direction_x, double axis_direction_y, double axis_point_depth);
140  void move(double step);
142  void pan(double step_x, double step_y);
144  void zoom(double factor);
146 
149  virtual void enable_viewport_splitting(unsigned nr_cols, unsigned nr_rows);
152  virtual bool is_viewport_splitting_enabled(unsigned* nr_cols_ptr = 0, unsigned* nr_rows_ptr = 0) const;
154  virtual void disable_viewport_splitting();
156  virtual void activate_split_viewport(context& ctx, unsigned col_index, unsigned row_index);
158  virtual void deactivate_split_viewport(context& ctx);
160  virtual void enable_viewport_individual_view(unsigned col_index, unsigned row_index, bool enable = true);
162  virtual bool does_viewport_use_individual_view(unsigned col_index, unsigned row_index) const;
164  virtual view& ref_viewport_view(unsigned col_index, unsigned row_index);
166 
182  virtual int get_modelview_projection_window_matrices(int x, int y, int width, int height,
183  const dmat4** MPW_pptr,
184  const dmat4** MPW_other_pptr = 0, int* x_other_ptr = 0, int* y_other_ptr = 0,
185  int* vp_col_idx_ptr = 0, int* vp_row_idx_ptr = 0,
186  int* vp_width_ptr = 0, int *vp_height_ptr = 0,
187  int* vp_center_x_ptr = 0, int* vp_center_y_ptr = 0,
188  int* vp_center_x_other_ptr = 0, int* vp_center_y_other_ptr = 0) const;
189 
190  DEPRECATED("deprecated, use get_modelview_projection_window_matrices() instead.") virtual int get_modelview_projection_device_matrices(int x, int y, int width, int height,
191  const dmat4** MVPD_pptr,
192  const dmat4** MVPD_other_pptr = 0, int* x_other_ptr = 0, int* y_other_ptr = 0,
193  int* vp_col_idx_ptr = 0, int* vp_row_idx_ptr = 0,
194  int* vp_width_ptr = 0, int *vp_height_ptr = 0,
195  int* vp_center_x_ptr = 0, int* vp_center_y_ptr = 0,
196  int* vp_center_x_other_ptr = 0, int* vp_center_y_other_ptr = 0) const {
197  return get_modelview_projection_window_matrices(x,y,width,height,MVPD_pptr,MVPD_other_pptr,
198  x_other_ptr,y_other_ptr,vp_col_idx_ptr, vp_row_idx_ptr, vp_width_ptr, vp_height_ptr,
199  vp_center_x_ptr, vp_center_y_ptr, vp_center_x_other_ptr, vp_center_y_other_ptr);
200  }
202 
204  virtual double get_z_and_unproject(context& ctx, int x, int y, dvec3& p);
205  double get_z_and_unproject(context& ctx, int x, int y, vec3& p);
207  void compute_screen_rectangle(std::vector<dvec3>& rect, double depth, double aspect) const;
208  void compute_screen_rectangle(std::vector<vec3>& rect, double depth, double aspect) const;
210 
211 };
212  }
213 }
214 
215 #include <cgv/config/lib_end.h>
cgv::math::fmat
matrix of fixed size dimensions
Definition: fmat.h:23
cgv::render::view
Definition: view.h:22
cgv::math::fvec< float, 3 >
cgv::render::view::focus
dvec3 focus
focus of the view
Definition: view.h:30
cgv
the cgv namespace
Definition: vr_calib.cxx:9