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 00023 class PerspectiveCamera : public SimpleCamera 00024 { 00025 public: 00027 00028 NVSG_API static const PerspectiveCamera * create( void ); 00029 00031 00032 NVSG_API static const PerspectiveCamera * createFromBase( const SimpleCamera &rhs 00033 ); 00034 00036 00037 NVSG_API virtual const PerspectiveCamera * clone( void ) const; 00038 00040 00043 NVSG_API float getFieldOfView() const; 00044 00046 00047 NVSG_API void setFieldOfView( float fov 00048 ); 00049 00051 00053 NVSG_API virtual void setTargetDistance( float td 00054 ); 00055 00057 00058 NVSG_API virtual nvmath::Mat44f getProjection() const; 00059 00061 00062 NVSG_API virtual nvmath::Mat44f getInverseProjection() const; 00063 00064 protected: 00066 NVSG_API PerspectiveCamera(); 00067 00069 NVSG_API PerspectiveCamera( const SimpleCamera &rhs ); 00070 00072 NVSG_API PerspectiveCamera( const PerspectiveCamera &rhs ); 00073 00075 NVSG_API virtual ~PerspectiveCamera(void); 00076 }; 00077 00078 inline float PerspectiveCamera::getFieldOfView() const 00079 { 00080 __TRACE(); 00081 return( 2.0f * atanf( 0.5f * getWindowSize()[1] / getTargetDistance() ) ); 00082 } 00083 } // namespace