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 = {}) :
39 virtual dmat4 transform(
const dvec3& offset = {})
const = 0;
41 virtual dmat4 inverse(
const dvec3& offset = {})
const
43 return vsg::inverse(transform(offset));
46 void read(Input& input)
override;
47 void write(Output& output)
const override;
49 VSG_type_name(vsg::ViewMatrix);
52 class VSG_DECLSPEC LookAt :
public Inherit<ViewMatrix, LookAt>
57 center(0.0, 1.0, 0.0),
62 LookAt(
const LookAt& lookAt,
const CopyOp& copyop = {}) :
63 Inherit(lookAt, copyop),
65 center(lookAt.center),
70 LookAt(
const dvec3& in_eye,
const dvec3& in_center,
const dvec3& in_up) :
75 dvec3 look = normalize(center - eye);
76 dvec3 side = normalize(cross(look, up));
77 up = normalize(cross(side, look));
80 LookAt& operator=(
const LookAt& lookAt)
83 center = lookAt.center;
90 void transform(
const dmat4& matrix);
92 void set(
const dmat4& matrix);
94 dmat4 transform(
const dvec3& offset = {})
const override;
96 void read(Input& input)
override;
97 void write(Output& output)
const override;
103 VSG_type_name(vsg::LookAt);
106 class VSG_DECLSPEC LookDirection :
public vsg::Inherit<ViewMatrix, LookDirection>
110 position(0.0, 0.0, 0.0),
115 LookDirection(
const LookDirection& view,
const CopyOp& copyop = {}) :
116 Inherit(view, copyop),
117 position(view.position),
118 rotation(view.rotation)
127 void set(
const dmat4& matrix);
129 dmat4 transform(
const dvec3& offset = {})
const override;
131 VSG_type_name(vsg::LookDirection);
134 class VSG_DECLSPEC RelativeViewMatrix :
public Inherit<ViewMatrix, RelativeViewMatrix>
144 dmat4
transform(
const dvec3& offset = {})
const override;
154 class VSG_DECLSPEC TrackingViewMatrix :
public Inherit<ViewMatrix, TrackingViewMatrix>
158 explicit TrackingViewMatrix(
const dmat4& initial_matrix,
const T& path) :
159 matrix(initial_matrix),
160 objectPath(path.begin(), path.end()) {}
163 explicit TrackingViewMatrix(
const T& path) :
164 objectPath(path.begin(), path.end()) {}
167 dmat4
transform(
const dvec3& offset = {})
const override;
168 dmat4 inverse(
const dvec3& offset = {})
const override;
171 RefObjectPath objectPath;
173 VSG_type_name(vsg::TrackingViewMatrix);
ref_ptr< Object > clone(const CopyOp ©op={}) const override
Definition ViewMatrix.h:88
ref_ptr< Object > clone(const CopyOp ©op={}) const override
Definition ViewMatrix.h:122
RelativeViewMatrix is a ViewMatrix that decorates another ViewMatrix and pre-multiplies its transform...
Definition ViewMatrix.h:135
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:37