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/CullData.h" 00018 #include "nvtraverser/CullTraverser.h" 00019 00020 namespace nvtraverser 00021 { 00023 00026 class FrustumCullTraverser : public CullTraverser 00027 { 00028 public: 00030 NVSG_API FrustumCullTraverser(void); 00031 00032 protected: 00034 NVSG_API virtual ~FrustumCullTraverser(void); 00035 00036 // preTraverseRoot override 00037 NVSG_API virtual bool preTraverseRoot( const nvsg::SimpleCamera *p, const nvsg::Node *root ); 00038 00039 // Reimplemented from CullTraverser 00040 NVSG_API virtual nvsg::CullCode cullCode( const nvsg::Drawable *p ) const; 00041 NVSG_API virtual nvsg::CullCode cullCode( const nvsg::Node *p ) const; 00042 00043 NVSG_API virtual bool preTraverseTransform( const nvsg::Transform *p 00044 ); 00045 NVSG_API virtual void postTraverseTransform( const nvsg::Transform *p 00046 ); 00047 00048 private: 00049 // Determine the CullCode based on a sphere 00050 nvsg::CullCode _cullCode( const nvmath::Sphere3f &sphere ) const; 00051 00052 private: 00053 const nvsg::SimpleCamera * m_camera; 00054 mutable float m_scaleFactor; 00055 }; 00056 00057 } 00058