70 ArcBall(
const Vector3& cameraPosition,
const Vector3& viewCenter,
71 const Vector3& upDir, Deg fov,
const Magnum::Vector2i& windowSize);
75 void setViewParameters(
const Vector3& eye,
const Vector3& viewCenter,
76 const Vector3& upDir);
82 void rotateToAxis(
const Vector3& axis,
float distance);
88 void reshape(
const Magnum::Vector2i& windowSize) { _windowSize = windowSize; }
92 bool updateTransformation();
96 Float lagging()
const {
return _lagging; }
97 void setLagging(Float lagging);
101 void initTransformation(
const Magnum::Vector2i& mousePos);
105 void rotate(
const Magnum::Vector2i& mousePos);
109 void translate(
const Magnum::Vector2i& mousePos);
113 void translateDelta(
const Vector2& translationNDC);
116 void zoom(Float delta);
119 void zoomTo(Float delta);
122 const DualQuaternion& view()
const {
return _view; }
125 Matrix4 viewMatrix()
const {
return _view.toMatrix(); }
129 Matrix4 inverseViewMatrix()
const {
return _inverseView.toMatrix(); }
132 const DualQuaternion& transformation()
const {
return _inverseView; }
135 Matrix4 transformationMatrix()
const {
return _inverseView.toMatrix(); }
138 Float viewDistance()
const {
return Math::abs(_targetZooming); }
145 void rotateToEulerAngles(
const Vector3& eulerAngles);
149 void updateInternalTransformations();
154 Vector2 screenCoordToNDC(
const Magnum::Vector2i& mousePos)
const;
157 Magnum::Vector2i _windowSize;
159 Vector2 _prevMousePosNDC;
162 Vector3 _targetPosition, _currentPosition, _positionT0;
163 Quaternion _targetQRotation, _currentQRotation, _qRotationT0;
164 Float _targetZooming, _currentZooming, _zoomingT0;
165 DualQuaternion _view, _inverseView;