cgv
|
#include <stereo_view.h>
Public Member Functions | |
stereo_view () | |
construct with standard values | |
double | get_eye_distance () const |
query distance between eyes | |
virtual void | set_eye_distance (double e) |
set distance between eyes | |
double | get_parallax_zero_scale () const |
query scale of parallax zero depth with respect to eye focus distance | |
double | get_parallax_zero_depth () const |
query parallax zero depth | |
virtual void | set_parallax_zero_scale (double pzs) |
set parallax zero scale | |
void | compute_clipping_planes (double &z_near_derived, double &z_far_derived, bool clip_relative_to_extent=false) const |
compute clipping planes adapted to the current scene extent, z_near_derived is at least z_near and as large as possible to include the scene, similarly z_far_derived is as small as possible | |
void | compute_clipping_planes (const view &view, double &z_near_derived, double &z_far_derived, bool clip_relative_to_extent=false) const |
compute clipping planes according to given view adapted to the current scene extent, z_near_derived is at least z_near and as large as possible to include the scene, similarly z_far_derived is as small as possible | |
void | compute_clipping_planes (const dvec3 &eye, const dvec3 &view_dir, double &z_near_derived, double &z_far_derived, bool clip_relative_to_extent=false) const |
compute clipping planes according to given view adapted to the current scene extent, z_near_derived is at least z_near and as large as possible to include the scene, similarly z_far_derived is as small as possible | |
getter and setter methods of view defining parameters | |
const dvec3 & | get_focus () const |
query focus point | |
virtual void | set_focus (const dvec3 &foc) |
set a new focus point keeping y extent at focus and y view angle fix, such that the eye position is also changed | |
void | set_focus (const vec3 &foc) |
void | set_focus (double x, double y, double z) |
set focus from coordinates | |
dvec3 & | ref_focus () |
write access to focus point | |
const dvec3 & | get_view_dir () const |
query current view direction | |
virtual void | set_view_dir (const dvec3 &vd) |
set view direction without ensuring orthogonality to view up direction | |
void | set_view_dir (const vec3 &vd) |
void | set_view_dir (double x, double y, double z) |
set view direction from coordinates | |
dvec3 & | ref_view_dir () |
write access to view dir | |
const dvec3 & | get_view_up_dir () const |
query current view up direction | |
virtual void | set_view_up_dir (const dvec3 &vud) |
set view up direction without ensuring orthogonality to view direction | |
void | set_view_up_dir (const vec3 &vud) |
void | set_view_up_dir (double x, double y, double z) |
set view up direction from coordinates | |
dvec3 & | ref_view_up_dir () |
write access to view up direction | |
double & | ref_y_extent_at_focus () |
write access to extent at focus | |
double | get_y_view_angle () const |
query opening angle of view in y-direction | |
virtual void | set_y_view_angle (double angle) |
set opening angle of view in y-direction keeping y extent at focus resulting in a dolly zoom | |
double | get_y_extent_at_focus () const |
query y extent of viewing window at focus point | |
virtual void | set_y_extent_at_focus (double ext) |
set y extent of viewing window at focus point keeping y view angle resulting in a zoom | |
double & | ref_y_view_angle () |
write access to view angle | |
derived quantities | |
double | get_tan_of_half_of_fovy (bool ensure_non_zero) const |
compute tan of half of y view angle, if ensure_non_zero is true, replace y view angles < 0.1 with 0.1 | |
double | get_y_extent_at_depth (double depth, bool ensure_non_zero) const |
get y extent of viewing window at an arbitrary depth, if ensure_non_zero is true, replace y view angles < 0.1 with 0.1 | |
double | get_depth_of_focus () const |
return the depth of the focus point | |
void | put_coordinate_system (dvec3 &x, dvec3 &y, dvec3 &z) const |
construct coordinate system with z in negative view direction and x and y aligned with the right and up direction of the viewed image More... | |
void | put_coordinate_system (vec3 &x, vec3 &y, vec3 &z) const |
int | compute_axis_and_angle (const dvec3 &target_view_dir, const dvec3 &target_view_up_dir, dvec3 &axis, double &angle) |
compute axis and angle of a rotation that the current view_dir and view_up_dir to the given target_view_dir and target_view_up_dir More... | |
bool | is_parallel () const |
return whether the y view angle is zero | |
const dvec3 | get_eye () const |
query the eye point, which is computed from focus, view dir, y extent at focus and y view angle More... | |
bool | set_eye_keep_extent (const dvec3 &eye) |
set view dir and y view angle keeping focus and y extent such that get_eye() returns the passed point, return whether this was successful. More... | |
bool | set_eye_keep_view_angle (const dvec3 &eye) |
set the view dir and y extent at focus keeping focus and y view angle such that get_eye() returns the passed point, return whether this was successful. More... | |
void | view_look_at_keep_view_angle (const dvec3 &eye, const dvec3 &foc, const dvec3 &vud) |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-extent at the focus point constant More... | |
void | view_look_at_keep_extent (const dvec3 &eye, const dvec3 &foc, const dvec3 &vud) |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-view angle constant More... | |
view control | |
void | roll (double angle) |
roll view around view direction by angle | |
void | rotate (double axis_direction_x, double axis_direction_y, double axis_point_depth) |
rotated view around axis by angle More... | |
void | move (double step) |
move along view direction by given step length in world coordinates | |
void | pan (double step_x, double step_y) |
move in screen x and screen y directions by given step lengths in world coordinates | |
void | zoom (double factor) |
zoom by given factor | |
getter and setter methods of view defining parameters | |
const dvec3 & | get_focus () const |
query focus point | |
virtual void | set_focus (const dvec3 &foc) |
set a new focus point keeping y extent at focus and y view angle fix, such that the eye position is also changed | |
void | set_focus (const vec3 &foc) |
void | set_focus (double x, double y, double z) |
set focus from coordinates | |
dvec3 & | ref_focus () |
write access to focus point | |
const dvec3 & | get_view_dir () const |
query current view direction | |
virtual void | set_view_dir (const dvec3 &vd) |
set view direction without ensuring orthogonality to view up direction | |
void | set_view_dir (const vec3 &vd) |
void | set_view_dir (double x, double y, double z) |
set view direction from coordinates | |
dvec3 & | ref_view_dir () |
write access to view dir | |
const dvec3 & | get_view_up_dir () const |
query current view up direction | |
virtual void | set_view_up_dir (const dvec3 &vud) |
set view up direction without ensuring orthogonality to view direction | |
void | set_view_up_dir (const vec3 &vud) |
void | set_view_up_dir (double x, double y, double z) |
set view up direction from coordinates | |
dvec3 & | ref_view_up_dir () |
write access to view up direction | |
double & | ref_y_extent_at_focus () |
write access to extent at focus | |
double | get_y_view_angle () const |
query opening angle of view in y-direction | |
virtual void | set_y_view_angle (double angle) |
set opening angle of view in y-direction keeping y extent at focus resulting in a dolly zoom | |
double | get_y_extent_at_focus () const |
query y extent of viewing window at focus point | |
virtual void | set_y_extent_at_focus (double ext) |
set y extent of viewing window at focus point keeping y view angle resulting in a zoom | |
double & | ref_y_view_angle () |
write access to view angle | |
derived quantities | |
double | get_tan_of_half_of_fovy (bool ensure_non_zero) const |
compute tan of half of y view angle, if ensure_non_zero is true, replace y view angles < 0.1 with 0.1 | |
double | get_y_extent_at_depth (double depth, bool ensure_non_zero) const |
get y extent of viewing window at an arbitrary depth, if ensure_non_zero is true, replace y view angles < 0.1 with 0.1 | |
double | get_depth_of_focus () const |
return the depth of the focus point | |
void | put_coordinate_system (dvec3 &x, dvec3 &y, dvec3 &z) const |
construct coordinate system with z in negative view direction and x and y aligned with the right and up direction of the viewed image More... | |
void | put_coordinate_system (vec3 &x, vec3 &y, vec3 &z) const |
int | compute_axis_and_angle (const dvec3 &target_view_dir, const dvec3 &target_view_up_dir, dvec3 &axis, double &angle) |
compute axis and angle of a rotation that the current view_dir and view_up_dir to the given target_view_dir and target_view_up_dir More... | |
bool | is_parallel () const |
return whether the y view angle is zero | |
const dvec3 | get_eye () const |
query the eye point, which is computed from focus, view dir, y extent at focus and y view angle More... | |
bool | set_eye_keep_extent (const dvec3 &eye) |
set view dir and y view angle keeping focus and y extent such that get_eye() returns the passed point, return whether this was successful. More... | |
bool | set_eye_keep_view_angle (const dvec3 &eye) |
set the view dir and y extent at focus keeping focus and y view angle such that get_eye() returns the passed point, return whether this was successful. More... | |
void | view_look_at_keep_view_angle (const dvec3 &eye, const dvec3 &foc, const dvec3 &vud) |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-extent at the focus point constant More... | |
void | view_look_at_keep_extent (const dvec3 &eye, const dvec3 &foc, const dvec3 &vud) |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-view angle constant More... | |
view control | |
void | roll (double angle) |
roll view around view direction by angle | |
void | rotate (double axis_direction_x, double axis_direction_y, double axis_point_depth) |
rotated view around axis by angle More... | |
void | move (double step) |
move along view direction by given step length in world coordinates | |
void | pan (double step_x, double step_y) |
move in screen x and screen y directions by given step lengths in world coordinates | |
void | zoom (double factor) |
zoom by given factor | |
getter and setter methods of view defining parameters | |
const dvec3 & | get_focus () const |
query focus point | |
virtual void | set_focus (const dvec3 &foc) |
set a new focus point keeping y extent at focus and y view angle fix, such that the eye position is also changed | |
void | set_focus (const vec3 &foc) |
void | set_focus (double x, double y, double z) |
set focus from coordinates | |
dvec3 & | ref_focus () |
write access to focus point | |
const dvec3 & | get_view_dir () const |
query current view direction | |
virtual void | set_view_dir (const dvec3 &vd) |
set view direction without ensuring orthogonality to view up direction | |
void | set_view_dir (const vec3 &vd) |
void | set_view_dir (double x, double y, double z) |
set view direction from coordinates | |
dvec3 & | ref_view_dir () |
write access to view dir | |
const dvec3 & | get_view_up_dir () const |
query current view up direction | |
virtual void | set_view_up_dir (const dvec3 &vud) |
set view up direction without ensuring orthogonality to view direction | |
void | set_view_up_dir (const vec3 &vud) |
void | set_view_up_dir (double x, double y, double z) |
set view up direction from coordinates | |
dvec3 & | ref_view_up_dir () |
write access to view up direction | |
double & | ref_y_extent_at_focus () |
write access to extent at focus | |
double | get_y_view_angle () const |
query opening angle of view in y-direction | |
virtual void | set_y_view_angle (double angle) |
set opening angle of view in y-direction keeping y extent at focus resulting in a dolly zoom | |
double | get_y_extent_at_focus () const |
query y extent of viewing window at focus point | |
virtual void | set_y_extent_at_focus (double ext) |
set y extent of viewing window at focus point keeping y view angle resulting in a zoom | |
double & | ref_y_view_angle () |
write access to view angle | |
derived quantities | |
double | get_tan_of_half_of_fovy (bool ensure_non_zero) const |
compute tan of half of y view angle, if ensure_non_zero is true, replace y view angles < 0.1 with 0.1 | |
double | get_y_extent_at_depth (double depth, bool ensure_non_zero) const |
get y extent of viewing window at an arbitrary depth, if ensure_non_zero is true, replace y view angles < 0.1 with 0.1 | |
double | get_depth_of_focus () const |
return the depth of the focus point | |
void | put_coordinate_system (dvec3 &x, dvec3 &y, dvec3 &z) const |
construct coordinate system with z in negative view direction and x and y aligned with the right and up direction of the viewed image More... | |
void | put_coordinate_system (vec3 &x, vec3 &y, vec3 &z) const |
int | compute_axis_and_angle (const dvec3 &target_view_dir, const dvec3 &target_view_up_dir, dvec3 &axis, double &angle) |
compute axis and angle of a rotation that the current view_dir and view_up_dir to the given target_view_dir and target_view_up_dir More... | |
bool | is_parallel () const |
return whether the y view angle is zero | |
const dvec3 | get_eye () const |
query the eye point, which is computed from focus, view dir, y extent at focus and y view angle More... | |
bool | set_eye_keep_extent (const dvec3 &eye) |
set view dir and y view angle keeping focus and y extent such that get_eye() returns the passed point, return whether this was successful. More... | |
bool | set_eye_keep_view_angle (const dvec3 &eye) |
set the view dir and y extent at focus keeping focus and y view angle such that get_eye() returns the passed point, return whether this was successful. More... | |
void | view_look_at_keep_view_angle (const dvec3 &eye, const dvec3 &foc, const dvec3 &vud) |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-extent at the focus point constant More... | |
void | view_look_at_keep_extent (const dvec3 &eye, const dvec3 &foc, const dvec3 &vud) |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-view angle constant More... | |
view control | |
void | roll (double angle) |
roll view around view direction by angle | |
void | rotate (double axis_direction_x, double axis_direction_y, double axis_point_depth) |
rotated view around axis by angle More... | |
void | move (double step) |
move along view direction by given step length in world coordinates | |
void | pan (double step_x, double step_y) |
move in screen x and screen y directions by given step lengths in world coordinates | |
void | zoom (double factor) |
zoom by given factor | |
Protected Attributes | |
double | eye_distance |
distance between eyes | |
double | parallax_zero_scale |
scale of parallax zero depth with respect to eye focus distance | |
dvec3 | focus |
focus of the view | |
getter and setter methods | |
double | get_z_near () const |
return the currently set z-value for the z-near clipping plane | |
virtual void | set_z_near (double z) |
set the z-value for the z-near clipping plane | |
double | get_z_far () const |
return the currently set z-value for the z-far clipping plane | |
virtual void | set_z_far (double z) |
set the z-value for the z-far clipping plane | |
virtual void | set_scene_extent (const dbox3 &_box) |
set the extent of the scene in world coordinates used by the compute_clipping_planes functions to adapt the clipping planes to the scene | |
dbox3 | get_scene_extent () const |
return the currently set scene extent | |
virtual void | set_default_view () |
reset view with focus and y-extent based on current scene extent | |
static double | get_z_D (double z_eye, double z_near, double z_far) |
transform a z value in eye-coordinates (should be negative!) to device coordinate | |
viewport splitting | |
virtual void | enable_viewport_splitting (unsigned nr_cols, unsigned nr_rows) |
call this function before a drawing process to support viewport splitting inside the draw call via the activate/deactivate functions | |
virtual bool | is_viewport_splitting_enabled (unsigned *nr_cols_ptr=0, unsigned *nr_rows_ptr=0) const |
check whether viewport splitting is activated and optionally set the number of columns and rows if corresponding pointers are passed | |
virtual void | disable_viewport_splitting () |
disable viewport splitting | |
virtual void | activate_split_viewport (context &ctx, unsigned col_index, unsigned row_index) |
inside the drawing process activate the sub-viewport with the given column and row indices, always terminate an activated viewport with deactivate_split_viewport | |
virtual void | deactivate_split_viewport (context &ctx) |
deactivate the previously split viewport | |
virtual void | enable_viewport_individual_view (unsigned col_index, unsigned row_index, bool enable=true) |
make a viewport manage its own view | |
virtual bool | does_viewport_use_individual_view (unsigned col_index, unsigned row_index) const |
check whether viewport manage its own view | |
virtual view & | ref_viewport_view (unsigned col_index, unsigned row_index) |
access the view of a given viewport | |
virtual int | get_modelview_projection_window_matrices (int x, int y, int width, int height, const dmat4 **MPW_pptr, const dmat4 **MPW_other_pptr=0, int *x_other_ptr=0, int *y_other_ptr=0, int *vp_col_idx_ptr=0, int *vp_row_idx_ptr=0, int *vp_width_ptr=0, int *vp_height_ptr=0, int *vp_center_x_ptr=0, int *vp_center_y_ptr=0, int *vp_center_x_other_ptr=0, int *vp_center_y_other_ptr=0) const |
given a mouse location and the pixel extent of the context, return the modelview_projection_window matrix for unprojection More... | |
DEPRECATED ("deprecated, use get_modelview_projection_window_matrices() instead.") virtual int get_modelview_projection_device_matrices(int x | |
double | get_z_and_unproject (context &ctx, int x, int y, vec3 &p) |
given a pixel location x,y return the z-value from the depth buffer, which ranges from 0.0 at z_near to 1.0 at z_far and a point in world coordinates More... | |
void | compute_screen_rectangle (std::vector< dvec3 > &rect, double depth, double aspect) const |
fill rect with four points covering the screen rectangle at given depth from eye with given aspect ratio More... | |
void | compute_screen_rectangle (std::vector< vec3 > &rect, double depth, double aspect) const |
int | y |
int int | width |
int int int | height |
int int int const dmat4 ** | MVPD_pptr |
int int int const dmat4 const dmat4 ** | MVPD_other_pptr = 0 |
int int int const dmat4 const dmat4 int * | x_other_ptr = 0 |
int int int const dmat4 const dmat4 int int * | y_other_ptr = 0 |
int int int const dmat4 const dmat4 int int int * | vp_col_idx_ptr = 0 |
int int int const dmat4 const dmat4 int int int int * | vp_row_idx_ptr = 0 |
int int int const dmat4 const dmat4 int int int int int * | vp_width_ptr = 0 |
int int int const dmat4 const dmat4 int int int int int int * | vp_height_ptr = 0 |
int int int const dmat4 const dmat4 int int int int int int int * | vp_center_x_ptr = 0 |
int int int const dmat4 const dmat4 int int int int int int int int * | vp_center_y_ptr = 0 |
int int int const dmat4 const dmat4 int int int int int int int int int * | vp_center_x_other_ptr = 0 |
int int int const dmat4 const dmat4 int int int int int int int int int int * | vp_center_y_other_ptr |
extends the clipped view with information on eye distance and parallax zero information.
|
inherited |
compute axis and angle of a rotation that the current view_dir and view_up_dir to the given target_view_dir and target_view_up_dir
returns the result of the function cgv::math::decompose_rotation_to_axis_and_angle()
|
inherited |
fill rect
with four points covering the screen rectangle at given depth from eye with given aspect ratio
fill the given vector with four points covering the screen rectangle
|
inherited |
query the eye point, which is computed from focus, view dir, y extent at focus and y view angle
With the y view angle approaching 0, the eye point moves infinitely far away. To avoid numerical problems, the eye point is computed with an y view angle no less than 0.1.
|
virtualinherited |
given a mouse location and the pixel extent of the context, return the modelview_projection_window matrix for unprojection
In stereo modes with split viewport, the returned MPW is the one the mouse pointer is on. The return value is in this case -1 or 1 and tells if MPW corresponds to the left (-1) or right (1) viewport. Furthermore, the MPW of the corresponding mouse location in the other eye is returned through MPW_other_ptr and the mouse location in x_other_ptr and y_other_ptr. In anaglyph or quad buffer stereo mode the other mouse location is identical to the incoming x and y location and 0 is returned. In mono mode, the other MPW and mouse locations are set to values identical to MPW and x,y and also 0 is returned.
In case the viewport splitting was enabled during the last drawing process, the MPW and MPW_other matrices are set to the one valid in the panel that the mouse position x,y is in. The panel column and row indices are passed to the vp_col_idx and vp_row_idx pointers. In case that viewport splitting was disabled, 0 is passed to the panel location index pointers.
Finally, the vp_width, vp_height, vp_center_x, and vp_center_y pointers are set to the viewport size and center mouse location of the panel panel that the mouse pointer is in.
All pointer arguments starting with MPW_other_ptr can be set to the null pointer.
given a pixel location x,y return the z-value from the depth buffer, which ranges from 0.0 at z_near to 1.0 at z_far and a point in world coordinates
in case of stereo rendering two z-values exist that can be unprojected to two points in world coordinates. In this case the possibility with smaller z value is selected.
construct coordinate system with z in negative view direction and x and y aligned with the right and up direction of the viewed image
If view direction and view up direction are not orthogonal, the y direction will point in the component of the view up direction that is orthogonal to the view direction.
|
inherited |
rotated view around axis by angle
Axis is given by point and direction, where the point is in the image center and the given depth and the axis points into a direction in image plane given through its screen x and screen y coordinate. The length of the axis vector gives the rotation angle in radians. Rotation around screen x direction corresponds to yaw and around screen y direction to gear rotations.
|
inherited |
set view dir and y view angle keeping focus and y extent such that get_eye() returns the passed point, return whether this was successful.
Recomputes view up direction to make it orthogonal to view direction. In the case that the eye point is identical to the current focus point the function fails and returns false.
|
inherited |
set the view dir and y extent at focus keeping focus and y view angle such that get_eye() returns the passed point, return whether this was successful.
Recomputes view up direction to make it orthogonal to view direction. In the case that the eye point is identical to the current focus point the function fails and returns false. If the current view angle is < 0.1, the view anlge 0.1 is used for eye point calculation
|
inherited |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-view angle constant
set the view according to the standard view lookat definition from eye, focus and view up direction.
|
inherited |
set the view according to the standard view lookat definition from eye, focus and view up direction keeping the y-extent at the focus point constant
set the view according to the standard view lookat definition from eye, focus and view up direction.