00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #pragma once
00013
00015 #include "nvsgcommon.h"
00016
00017 #include "nvsg/SimpleCamera.h"
00018
00019 namespace nvsg
00020 {
00022
00047 class JitterCamera : public MonoCamera
00048 {
00049 public:
00051
00052 NVSG_API static const JitterCamera * create( const SimpleCamera &base
00053 , const std::vector<nvmath::Vec2f> &jitters
00054 );
00055
00056 NVSG_API static const JitterCamera * createFromBase( const MonoCamera &rhs
00057 , const SimpleCamera &base
00058 , const std::vector<nvmath::Vec2f> &jitters
00059 );
00060
00062
00063 NVSG_API virtual const JitterCamera * clone( void ) const;
00064
00066
00067 NVSG_API virtual bool isDataShared() const;
00068
00070
00071 NVSG_API virtual DataID getDataID() const;
00072
00073
00074
00075
00076
00078
00080 NVSG_API void getJitters( std::vector<nvmath::Vec2f> &jitters
00081 ) const;
00082
00084
00087 NVSG_API void setJitters( const std::vector<nvmath::Vec2f> &jitters
00088 );
00089
00091
00092 NVSG_API size_t getNumberOfPasses() const;
00093
00095
00097 NVSG_API void updateSimpleCameras( size_t vpWidth
00098 , size_t vpHeight
00099 ) const;
00100
00102
00105 NVSG_API const SimpleCamera * getBaseCamera() const;
00106
00108
00109 NVSG_API const SimpleCamera * getCamera( size_t index
00110 ) const;
00111
00112
00113
00114
00115
00117
00118 NVSG_API virtual nvmath::Mat44f getProjection() const;
00119
00121
00122 NVSG_API virtual float getProjectionDx() const;
00123
00125
00126 NVSG_API virtual nvmath::Mat44f getInverseProjection() const;
00127
00129 NVSG_API virtual void setProjectionDx( float dx
00130 );
00131
00132
00133
00134
00135
00137 NVSG_API virtual void addHeadLight(
00138 const LightSource * pLight
00139 , const nvmath::Vec3f &position = nvmath::Vec3f( 0.0f, 0.0f, 0.0f )
00140 , const nvmath::Quatf &quat = nvmath::Quatf( 0.0f, 0.0f, 0.0f, 1.0f )
00141 );
00142
00144
00145 NVSG_API virtual bool removeHeadLight( size_t index = 0
00146 );
00147
00149
00150 NVSG_API virtual size_t getNumberOfHeadLights() const;
00151
00153
00154 NVSG_API virtual const LightSource* getHeadLight( size_t index
00155 ) const;
00156
00158 NVSG_API virtual void getHeadLightTrafo( nvmath::Vec3f &trans
00159 , nvmath::Quatf &quat
00160 , size_t index = 0
00161 ) const;
00162
00164
00165 NVSG_API virtual bool setHeadLightTrafo( const nvmath::Vec3f &trans
00166 , const nvmath::Quatf &quat
00167 , size_t index = 0
00168 );
00169
00170
00171
00172
00173
00174
00176
00177 NVSG_API virtual nvmath::Vec3f getDirection() const;
00178
00180 NVSG_API virtual void setDirection( const nvmath::Vec3f& dir
00181 );
00182
00184
00185 NVSG_API virtual float getTargetDistance() const;
00186
00188 NVSG_API virtual void setTargetDistance( float td
00189 );
00190
00192
00193 NVSG_API virtual const nvmath::Vec3f& getPosition() const;
00194
00196 NVSG_API virtual void setPosition( const nvmath::Vec3f& pos
00197 );
00198
00200 NVSG_API virtual void setUpVector( const nvmath::Vec3f &up
00201 );
00202
00204
00205 NVSG_API virtual nvmath::Vec3f getUpVector() const;
00206
00208 NVSG_API virtual void setOrientation( const nvmath::Quatf &quat
00209 );
00210
00212 NVSG_API virtual void setOrientation( const nvmath::Vec3f &dir
00213 , const nvmath::Vec3f &up
00214 );
00215
00217 NVSG_API virtual void setOrientation( const nvmath::Vec3f &axis
00218 , float angle
00219 );
00220
00222
00223 NVSG_API virtual nvmath::Quatf getOrientation( void ) const;
00224
00226
00227 NVSG_API virtual nvmath::Mat44f getWorldToViewMatrix() const;
00228
00230
00231 NVSG_API virtual nvmath::Mat44f getViewToWorldMatrix() const;
00232
00234
00235 NVSG_API virtual const nvmath::Vec2f& getWindowOffset() const;
00236
00238 NVSG_API virtual void setWindowOffset( const nvmath::Vec2f &offset
00239 );
00240
00242 NVSG_API virtual void getWindowRegion( nvmath::Vec2f &lowerLeft
00243 , nvmath::Vec2f &upperRight
00244 ) const;
00245
00247 NVSG_API virtual void setWindowRegion( const nvmath::Vec2f &lowerLeft
00248 , const nvmath::Vec2f &upperRight
00249 );
00250
00252
00253 NVSG_API virtual const nvmath::Vec2f& getWindowSize() const;
00254
00256 NVSG_API virtual void setWindowSize( const nvmath::Vec2f &size
00257 );
00258
00260
00261 NVSG_API virtual float getAspectRatio() const;
00262
00264 NVSG_API virtual void setAspectRatio( float ar
00265 , bool keepWidth = false
00266 );
00267
00269
00274 NVSG_API virtual bool isAutoClipPlanes() const;
00275
00277 NVSG_API virtual void setAutoClipPlanes( bool on
00278 );
00279
00281 NVSG_API virtual void calcNearFarDistances( const nvmath::Sphere3f &sphere
00282 );
00283
00285
00286 NVSG_API virtual float getFarDistance() const;
00287
00289 NVSG_API virtual void setFarDistance( float fd
00290 );
00291
00293
00294 NVSG_API virtual float getNearDistance() const;
00295
00297 NVSG_API virtual void setNearDistance( float nd
00298 );
00299
00300
00301
00302
00303
00305 NVSG_API virtual void move( const nvmath::Vec3f& delta
00306 );
00307
00309 NVSG_API virtual void orbit( const nvmath::Vec3f& axis
00310 , float rad
00311 );
00312
00314 NVSG_API virtual void rotate( const nvmath::Vec3f& axis
00315 , float rad
00316 , bool cameraRelative = true
00317 );
00318
00320 NVSG_API virtual void zoom( float factor
00321 );
00322
00324 NVSG_API virtual void zoom( const nvmath::Sphere3f &sphere
00325 , float fovy = -1.0f
00326 );
00327
00328
00329 protected:
00331
00335 NVSG_API JitterCamera( const SimpleCamera& base
00336 , const std::vector<nvmath::Vec2f> &jitters
00337 );
00338
00340 NVSG_API JitterCamera( const MonoCamera &rhs
00341 , const SimpleCamera &base
00342 , const std::vector<nvmath::Vec2f> &jitters );
00343
00345 NVSG_API JitterCamera( const JitterCamera& rhs
00346 );
00347
00349 NVSG_API virtual ~JitterCamera(void);
00350
00351 private:
00352 JitterCamera();
00353 JitterCamera& operator=(const JitterCamera& rhs) {}
00354
00355 private:
00356 const SimpleCamera * m_baseCamera;
00357 mutable std::vector< std::pair<const SimpleCamera*,nvmath::Vec2f> > m_cameras;
00358 };
00359
00360
00361
00362
00363 inline const SimpleCamera * JitterCamera::getBaseCamera() const
00364 {
00365 __TRACE();
00366 return( m_baseCamera );
00367 }
00368
00369 inline const SimpleCamera * JitterCamera::getCamera(size_t index) const
00370 {
00371 __TRACE();
00372 __ASSERT(index<m_cameras.size());
00373 return m_cameras[index].first;
00374 }
00375
00376 inline void JitterCamera::getJitters( std::vector<nvmath::Vec2f> &jitters ) const
00377 {
00378 __TRACE();
00379 jitters.resize( m_cameras.size() );
00380 for ( size_t i=0 ; i<jitters.size() ; i++ )
00381 {
00382 jitters[i] = m_cameras[i].second;
00383 }
00384 }
00385
00386 inline size_t JitterCamera::getNumberOfPasses() const
00387 {
00388 __TRACE();
00389 return( m_cameras.size() );
00390 }
00391 }