15#include <vsg/core/Inherit.h>
16#include <vsg/maths/transform.h>
22 class VSG_DECLSPEC ViewMatrix :
public Inherit<Object, ViewMatrix>
29 explicit ViewMatrix(
const ViewMatrix& vm,
const CopyOp& copyop = {}) :
40 virtual dmat4 transform(
const dvec3& offset = {})
const = 0;
42 virtual dmat4 inverse(
const dvec3& offset = {})
const
44 return vsg::inverse(transform(offset));
47 void read(Input& input)
override;
48 void write(Output& output)
const override;
50 VSG_type_name(vsg::ViewMatrix);
53 class VSG_DECLSPEC LookAt :
public Inherit<ViewMatrix, LookAt>
58 center(0.0, 1.0, 0.0),
63 LookAt(
const LookAt& lookAt,
const CopyOp& copyop = {}) :
64 Inherit(lookAt, copyop),
66 center(lookAt.center),
71 LookAt(
const dvec3& in_eye,
const dvec3& in_center,
const dvec3& in_up) :
76 dvec3 look = normalize(center - eye);
77 dvec3 side = normalize(cross(look, up));
78 up = normalize(cross(side, look));
81 LookAt& operator=(
const LookAt& lookAt)
84 center = lookAt.center;
91 void transform(
const dmat4& matrix);
93 void set(
const dmat4& matrix);
95 dmat4 transform(
const dvec3& offset = {})
const override;
97 void read(Input& input)
override;
98 void write(Output& output)
const override;
104 VSG_type_name(vsg::LookAt);
107 class VSG_DECLSPEC LookDirection :
public vsg::Inherit<ViewMatrix, LookDirection>
111 position(0.0, 0.0, 0.0),
116 LookDirection(
const LookDirection& view,
const CopyOp& copyop = {}) :
117 Inherit(view, copyop),
118 position(view.position),
119 rotation(view.rotation)
128 void set(
const dmat4& matrix);
130 dmat4 transform(
const dvec3& offset = {})
const override;
132 VSG_type_name(vsg::LookDirection);
135 class VSG_DECLSPEC RelativeViewMatrix :
public Inherit<ViewMatrix, RelativeViewMatrix>
145 dmat4
transform(
const dvec3& offset = {})
const override;
155 class VSG_DECLSPEC TrackingViewMatrix :
public Inherit<ViewMatrix, TrackingViewMatrix>
159 explicit TrackingViewMatrix(
const dmat4& initial_matrix,
const T& path) :
160 matrix(initial_matrix),
161 objectPath(path.begin(), path.end()) {}
164 explicit TrackingViewMatrix(
const T& path) :
165 objectPath(path.begin(), path.end()) {}
168 dmat4
transform(
const dvec3& offset = {})
const override;
169 dmat4 inverse(
const dvec3& offset = {})
const override;
172 RefObjectPath objectPath;
174 VSG_type_name(vsg::TrackingViewMatrix);
ref_ptr< Object > clone(const CopyOp ©op={}) const override
Definition ViewMatrix.h:89
ref_ptr< Object > clone(const CopyOp ©op={}) const override
Definition ViewMatrix.h:123
RelativeViewMatrix is a ViewMatrix that decorates another ViewMatrix and pre-multiplies its transform...
Definition ViewMatrix.h:136
dmat4 transform(const dvec3 &offset={}) const override
returns matrix * viewMatrix->transform()
dmat4 transform(const dvec3 &offset={}) const override
returns matrix * computeTransfrom(objectPath)
dvec3 origin
Definition ViewMatrix.h:38