12 #include <osg/ref_ptr>
15 #include <osg/Matrixd>
17 #include <osg/BoundingBox>
23 #define MYCAMERA_SUPPORT_QT
42 #ifdef MYCAMERA_SUPPORT_QT
72 Frustum(
float l,
float r,
float b,
float t,
float n,
float f )
82 #ifdef MYCAMERA_SUPPORT_QT // QObject should be explicitly initialized in copy contructor
119 void setAspect(
float aspect,
bool autoComputeAspect=
false ) { m_aspect=aspect; m_autoComputeAspect=autoComputeAspect;
updateProj(); }
121 void setFovAspect(
float fov,
float aspect,
bool autoComputeAspect=
false ) { m_fov=fov; m_aspect=aspect; m_autoComputeAspect=autoComputeAspect;
updateProj(); }
133 m_eye = m_center -
north()*dist;
148 void pan(
float dx,
float dy );
152 void zoom(
int x0,
int y0,
int x1,
int y1 );
155 void zoom(
const osg::BoundingBox& bbox );
158 void apply( osg::Camera* cam )
const;
161 inline float getFov()
const {
return m_fov; }
166 inline osg::Quat
rotation()
const {
return m_rotation; }
170 inline osg::Vec3
los()
const {
return m_center - m_eye; }
172 inline osg::Vec3
north()
const { osg::Vec3 n(m_center-m_eye); n.normalize();
return n; }
174 inline osg::Vec3
east()
const { osg::Vec3 s=
north() ^ m_up; s.normalize();
return s; }
176 inline osg::Vec3
up()
const {
return m_up; }
178 inline osg::Vec3
center()
const {
return m_center; }
187 { eye=m_eye; center=m_center; up=m_up; }
206 osg::Camera*
getCamera()
const {
return m_camera.get(); }
228 osg::Vec3
unproject(
int x,
int y, osg::Camera* cam=0 )
const;
247 float m_fov, m_aspect;
248 osg::Vec3 m_eye, m_center, m_up;
249 osg::Quat m_rotation;
251 osg::ref_ptr<osg::Camera> m_camera;
253 std::list<MyCamera*> m_linked;
255 bool m_autoComputeAspect;
256 bool m_disableNextUpdate;
257 bool m_fixedOrientation;
bool isFixedOrientation() const
Definition: MyCamera.h:218
void setRotation(osg::Quat q)
Set rotation (adjusts eye and up to match rotation, center stays fixed)
Definition: MyCamera.cpp:98
void zoom(int x0, int y0, int x1, int y1)
Definition: MyCamera.cpp:277
void setCenter(osg::Vec3 center)
Only change center (rarely used, most times you want translate())
Definition: MyCamera.h:139
osg::Vec3 unproject(int x, int y, osg::Camera *cam=0) const
Get the world space coordinates (on a screen-parallel plane through center) of a pixel on screen...
Definition: MyCamera.cpp:239
float bottom
Definition: MyCamera.h:66
Manage modelview and projection, allows switching between ORTHOGRAPHIC and PERSPECTIVE projection...
Definition: MyCamera.h:44
osg::Vec3 center() const
Get center.
Definition: MyCamera.h:178
osg::Vec3 los() const
Get line-of-sight = center - eye.
Definition: MyCamera.h:170
void setFovAspect(float fov, float aspect, bool autoComputeAspect=false)
Set fov and aspect ratio simultaneous.
Definition: MyCamera.h:121
void getLookAt(osg::Vec3 &eye, osg::Vec3 ¢er, osg::Vec3 &up) const
Get eye, center and up vector.
Definition: MyCamera.h:186
osg::Camera * getCamera() const
Get pointer to associated Camera (if any)
Definition: MyCamera.h:206
Perspective projection mode.
Definition: MyCamera.h:60
osg::Matrixd getViewMatrix() const
Provided for convenience use in MatrixManipulator classes (rarely used, OSG calls getInverseMatrix() ...
Definition: MyCamera.cpp:52
osg::Matrixd getInverseViewMatrix() const
Provided for convenience use in MatrixManipulator classes (OSG uses this one for the modelview) ...
Definition: MyCamera.cpp:60
osg::Vec3 north() const
Get "north" vector = normalized(center - eye)
Definition: MyCamera.h:172
Viewing frustum.
Definition: MyCamera.h:64
float top
Definition: MyCamera.h:66
void updateProj()
Definition: MyCamera.h:198
osg::Vec3 up() const
Get up vector.
Definition: MyCamera.h:176
float getFov() const
Get field of view (in radians)
Definition: MyCamera.h:161
void unlinkAll()
Definition: MyCamera.h:214
void setAspect(float aspect, bool autoComputeAspect=false)
Set projection aspect ratio.
Definition: MyCamera.h:119
void setFov(float fov)
Set projection fov.
Definition: MyCamera.h:117
float distance() const
Get distance from eye to center.
Definition: MyCamera.h:168
Frustum(float l, float r, float b, float t, float n, float f)
Definition: MyCamera.h:72
int getProjection() const
Get current Projection setting.
Definition: MyCamera.h:114
Projection
Supported projection modes.
Definition: MyCamera.h:58
virtual ~MyCamera()
Destructor (does nothing)
Definition: MyCamera.h:80
MyCamera(const MyCamera &other)
Copy constructor.
Definition: MyCamera.h:83
MyCamera()
Default constructor.
Definition: MyCamera.cpp:40
Frustum makeFrustum() const
Compute screen parallel plane through center matching fov, aspect and distance.
Definition: MyCamera.cpp:119
float zNear
Definition: MyCamera.h:66
void setLookAt(osg::Vec3 eye, osg::Vec3 center, osg::Vec3 up)
Set modelview (same syntax as gluLookAt)
Definition: MyCamera.cpp:68
float zFar
Definition: MyCamera.h:66
float getAspect() const
Get aspect ratio.
Definition: MyCamera.h:163
MyCamera & operator=(const MyCamera &other)
Copy assignment.
Definition: MyCamera.h:88
void setLike(const MyCamera &other)
Copy settings from another MyCamera.
Definition: MyCamera.h:90
Orhographic projection mode.
Definition: MyCamera.h:59
float right
Definition: MyCamera.h:66
void apply(osg::Camera *cam) const
Apply our projection and modelview to a Camera.
Definition: MyCamera.cpp:190
void setProjection(int proj)
Set either ORTHOGRAPHIC or PERSPECTIVE projection (default is PERSPECTIVE)
Definition: MyCamera.h:102
void unlink(MyCamera *other)
Definition: MyCamera.cpp:234
void updateView()
Definition: MyCamera.h:193
void setFixedOrientation(bool fixed)
Definition: MyCamera.h:217
void setDistance(float dist)
Set distance between eye and center keeping center fix and moving eye along viewing direction ("north...
Definition: MyCamera.h:130
void associate(osg::Camera *cam)
Associate single Camera which is updated everytime our modelview or projection changes.
Definition: MyCamera.h:204
Frustum()
Definition: MyCamera.h:68
float left
Definition: MyCamera.h:66
void link(MyCamera *other)
Definition: MyCamera.cpp:223
void update()
Update modelview and projection of associated camera.
Definition: MyCamera.cpp:136
void pan(float dx, float dy)
Pan center in direction of rotated up and east vector.
Definition: MyCamera.cpp:266
void disableNextUpdate()
Definition: MyCamera.h:243
osg::Vec3 east() const
Get "east" vector = cross product between north and up.
Definition: MyCamera.h:174
void setLikeCamera(osg::Camera *cam)
Set projection and modelview like given Camera (NO IMPLEMENTATION YET)
Definition: MyCamera.cpp:215
void translate(osg::Vec3 t)
Translate center.
Definition: MyCamera.h:146
bool isAutoComputeAspect() const
Definition: MyCamera.h:125
osg::Quat rotation() const
Get rotation.
Definition: MyCamera.h:166
void enableAutoComputeAspect()
Definition: MyCamera.h:124