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 "nvtraverser/Traverser.h" 00018 00019 namespace nvtraverser 00020 { 00022 00024 class SmoothTraverser : public Traverser 00025 { 00026 public: 00028 NVSG_API SmoothTraverser(void); 00029 00031 NVSG_API void setCreaseAngle( float creaseAngle ); 00032 00033 protected: 00035 NVSG_API virtual ~SmoothTraverser(void); 00036 00038 00039 NVSG_API virtual void handleAnimatedQuads( 00040 const nvsg::AnimatedQuads *p 00041 ); 00042 00044 00045 NVSG_API virtual void handleAnimatedTriangles( 00046 const nvsg::AnimatedTriangles *p 00047 ); 00048 00050 00051 NVSG_API virtual void handleGeoNode( 00052 const nvsg::GeoNode *p 00053 ); 00054 00056 NVSG_API virtual void handleQuads( 00057 const nvsg::Quads *p 00058 ); 00059 00061 00062 NVSG_API virtual void handleQuadStrips( 00063 const nvsg::QuadStrips *p 00064 ); 00065 00067 00068 NVSG_API virtual void handleSkinnedTriangles( 00069 const nvsg::SkinnedTriangles *p 00070 ); 00071 00073 NVSG_API virtual void handleTriangles( 00074 const nvsg::Triangles *p 00075 ); 00076 00078 00079 NVSG_API virtual void handleTriStrips( 00080 const nvsg::TriStrips *p 00081 ); 00082 00083 private: 00084 float m_creaseAngle; 00085 std::vector<const nvsg::GeoSet*> m_geoSets; 00086 std::vector<std::pair<const nvsg::QuadStrips*,const nvsg::Quads*> > m_quadStripsQuads; 00087 std::vector<std::pair<const nvsg::TriStrips*,const nvsg::Triangles*> > m_triStripsTriangles; 00088 }; 00089 }