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

StereoCamera.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/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       // stereo interface
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       // head light interface
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       // basic camera interface
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       // operations to perform on a camera
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       // assignment not permitted
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   // inlines
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 } // namespace

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