00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #pragma once
00013
00015 #include "nvsgcommon.h"
00016
00017 #include "nvsg/Camera.h"
00018
00019 namespace nvsg
00020 {
00021 class MonoCamera;
00023
00024 class StereoCamera : public Camera
00025 {
00026 public:
00028
00029 NVSG_API static const StereoCamera * create( const MonoCamera &base
00030 );
00031
00033 NVSG_API static const StereoCamera * createFromBase( const Camera &rhs
00034 , const MonoCamera &base
00035 );
00036
00038
00039 NVSG_API virtual const StereoCamera * clone( void ) const;
00040
00042
00043 NVSG_API virtual bool isDataShared( void ) const;
00044
00046
00047 NVSG_API virtual DataID getDataID( void ) const;
00048
00049
00050
00051
00052
00054
00059 NVSG_API float getDepthFactor( void ) const;
00060
00062
00067 NVSG_API void setDepthFactor( float df
00068 );
00069
00071
00076 NVSG_API float getFocusDistance( void ) const;
00077
00079
00084 NVSG_API void setFocusDistance( float fd
00085 );
00086
00088
00092 NVSG_API bool isLeftPassIndex( size_t pass
00093 ) const;
00094
00096
00099 NVSG_API void reverseLeftRight( void );
00100
00102
00104 NVSG_API void updateMonoCameras( void ) const;
00105
00107
00108 const MonoCamera * getMonoCamera( void ) const;
00109
00111
00112 const MonoCamera * getLeftCamera() const;
00113
00115
00116 const MonoCamera * getRightCamera() const;
00117
00118
00119
00120
00121
00123
00126 NVSG_API virtual void addHeadLight(
00127 const LightSource * pLight
00128 , const nvmath::Vec3f &position = nvmath::Vec3f( 0.0f, 0.0f, 0.0f )
00129 , const nvmath::Quatf &quat = nvmath::Quatf( 0.0f, 0.0f, 0.0f, 1.0f )
00130 );
00131
00133
00134 NVSG_API virtual size_t getNumberOfHeadLights( void ) const;
00135
00137
00138 NVSG_API virtual const LightSource * getHeadLight( size_t index
00139 ) const;
00140
00142
00143 NVSG_API virtual bool removeHeadLight( size_t index = 0
00144 );
00145
00147
00148 NVSG_API virtual bool setHeadLightTrafo( const nvmath::Vec3f &trans
00149 , const nvmath::Quatf &quat
00150 , size_t index = 0
00151 );
00152
00154
00155 NVSG_API virtual void getHeadLightTrafo( nvmath::Vec3f &trans
00156 , nvmath::Quatf &quat
00157 , size_t index = 0
00158 ) const;
00159
00160
00161
00162
00163
00165
00166 NVSG_API virtual float getTargetDistance( void ) const;
00167
00168
00170 NVSG_API virtual void setTargetDistance( float td
00171 );
00172
00174
00175 NVSG_API virtual nvmath::Vec3f getUpVector( void ) const;
00176
00178
00179 NVSG_API virtual const nvmath::Vec3f & getPosition( void ) const;
00180
00182 NVSG_API virtual void setPosition( const nvmath::Vec3f& pos
00183 );
00184
00186 NVSG_API virtual void setUpVector( const nvmath::Vec3f &up
00187 );
00188
00190
00192 NVSG_API virtual nvmath::Vec3f getDirection( void ) const;
00193
00195 NVSG_API virtual void setDirection( const nvmath::Vec3f& dir
00196 );
00197
00199 NVSG_API virtual void setOrientation( const nvmath::Quatf &quat
00200 );
00201
00203 NVSG_API virtual void setOrientation( const nvmath::Vec3f &dir
00204 , const nvmath::Vec3f &up
00205 );
00206
00208 NVSG_API virtual void setOrientation( const nvmath::Vec3f &axis
00209 , float angle
00210 );
00212
00213 NVSG_API virtual nvmath::Quatf getOrientation( void ) const;
00214
00216
00217 NVSG_API virtual nvmath::Mat44f getViewToWorldMatrix( void ) const;
00218
00220
00221 NVSG_API virtual nvmath::Mat44f getWorldToViewMatrix( void ) const;
00222
00224
00225 NVSG_API virtual const nvmath::Vec2f & getWindowOffset( void ) const;
00226
00228 NVSG_API virtual void setWindowOffset( const nvmath::Vec2f &offset
00229 );
00230
00232 NVSG_API virtual void getWindowRegion( nvmath::Vec2f &lowerLeft
00233 , nvmath::Vec2f &upperRight
00234 ) const;
00235
00237 NVSG_API virtual void setWindowRegion( const nvmath::Vec2f &lowerLeft
00238 , const nvmath::Vec2f &upperRight
00239 );
00240
00242
00243 NVSG_API virtual const nvmath::Vec2f & getWindowSize( void ) const;
00244
00246 NVSG_API virtual void setWindowSize( const nvmath::Vec2f &size
00247 );
00248
00250
00251 NVSG_API virtual float getAspectRatio( void ) const;
00252
00254 NVSG_API virtual void setAspectRatio( float ar
00255 , bool keepWidth = false
00256 );
00257
00259 NVSG_API virtual void setAutoClipPlanes( bool on
00260 );
00261
00263
00266 NVSG_API virtual bool isAutoClipPlanes( void ) const;
00267
00269
00271 NVSG_API virtual float getFarDistance( void ) const;
00272
00274 NVSG_API virtual void setFarDistance( float fd
00275 );
00276
00278
00280 NVSG_API virtual float getNearDistance( void ) const;
00281
00283 NVSG_API virtual void setNearDistance( float nd
00284 );
00285
00287
00289 NVSG_API virtual void calcNearFarDistances( const nvmath::Sphere3f &sphere
00290 );
00291
00292
00293
00294
00295
00297 NVSG_API virtual void move( const nvmath::Vec3f& delta
00298 );
00299
00301 NVSG_API virtual void orbit( const nvmath::Vec3f& axis
00302 , float rad
00303 );
00304
00306 NVSG_API virtual void rotate( const nvmath::Vec3f& axis
00307 , float rad
00308 , bool cameraRelative = true
00309 );
00310
00312 NVSG_API virtual void zoom( float factor
00313 );
00314
00316 NVSG_API virtual void zoom( const nvmath::Sphere3f &sphere
00317 , float fovy = -1.0f
00318 );
00319
00320
00321 protected:
00323
00325 NVSG_API StereoCamera( const MonoCamera& base
00326 );
00327
00329 NVSG_API StereoCamera( const Camera &rhs, const MonoCamera &base );
00330
00332 NVSG_API StereoCamera( const StereoCamera& rhs );
00333
00335 NVSG_API virtual ~StereoCamera( void );
00336
00337 private:
00338
00339 StereoCamera& operator=( const StereoCamera& rhs ) {}
00340
00341 private:
00342 const MonoCamera * m_baseCamera;
00343 float m_depthFactor;
00344 float m_focusDistance;
00345 int m_leftPassIndex;
00346
00347 mutable const MonoCamera * m_cameras[2];
00348 };
00349
00350
00351
00352
00353
00354 inline float StereoCamera::getDepthFactor( void ) const
00355 {
00356 __TRACE();
00357 return( m_depthFactor );
00358 }
00359
00360 inline float StereoCamera::getFocusDistance( void ) const
00361 {
00362 __TRACE();
00363 return( m_focusDistance );
00364 }
00365
00366 inline const MonoCamera * StereoCamera::getMonoCamera( void ) const
00367 {
00368 __TRACE();
00369 return( m_baseCamera );
00370 }
00371
00372 inline bool StereoCamera::isLeftPassIndex( size_t pass ) const
00373 {
00374 __TRACE();
00375 return( pass == m_leftPassIndex );
00376 }
00377
00378 inline void StereoCamera::reverseLeftRight( void )
00379 {
00380 __TRACE();
00381 m_leftPassIndex = ! m_leftPassIndex;
00382 }
00383
00384 inline void StereoCamera::setDepthFactor( float df )
00385 {
00386 __TRACE();
00387 m_depthFactor = df;
00388 }
00389
00390 inline void StereoCamera::setFocusDistance( float fd )
00391 {
00392 __TRACE();
00393 m_focusDistance = fd;
00394 }
00395
00396 inline const MonoCamera * StereoCamera::getLeftCamera() const
00397 {
00398 __TRACE();
00399 return m_cameras[0];
00400 }
00401
00402 inline const MonoCamera * StereoCamera::getRightCamera() const
00403 {
00404 __TRACE();
00405 return m_cameras[1];
00406 }
00407
00408 }