Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

JitterCamera.h

Go to the documentation of this file.
00001 // Copyright NVIDIA Corporation 2002-2004
00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
00005 // AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 
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       // Jitter interface
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       // MonoCamera interface
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       // head light handling interfaces
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       // basic camera interface
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       // operations to perform on a camera
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();   //  private default constructor to prevent usage
00353       JitterCamera& operator=(const JitterCamera& rhs) {} // assignment not permitted
00354 
00355     private:
00356       const SimpleCamera                                * m_baseCamera;
00357       mutable std::vector< std::pair<const SimpleCamera*,nvmath::Vec2f> >   m_cameras;
00358   };
00359 
00360   // - - - - - - - - - - - - - - - - - - - - -
00361   // inlines
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 } // namespace

Generated on Tue Mar 1 13:19:20 2005 for NVSGSDK by NVIDIA