TAPs 0.7.7.3
TAPsOpenGLXPolygonalModel.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsOpenGLXPolygonalModel.hpp
00003 
00004 (X <==> Extra)
00005 Class OpenGLXPolygonalModel is for creating an Extra OpenGL Polygonal Model.
00006 
00007 See class XPolygonalModel (in "../Model/TAPsXPolygonalModel.hpp") and
00008 class OpenGLSupport ("../OpenGL/TAPsOpenGLSupport.hpp") for detail.
00009 
00010 SUKITTI PUNAK   (11/01/2004)
00011 UPDATE          (06/25/2005)
00012 ******************************************************************************/
00013 #ifndef TAPs_OPENGL_XPOLYGONAL_MODEL_HPP
00014 #define TAPs_OPENGL_XPOLYGONAL_MODEL_HPP
00015 
00016 #include "TAPsXPolygonalModel.hpp"
00017 
00018 BEGIN_NAMESPACE_TAPs__OpenGL
00019 //=============================================================================
00020 template <typename T>
00021 class OpenGLXPolygonalModel : public /*virtual*/ XPolygonalModel<T> {
00022     //-------------------------------------------------------------------------
00023     // put it through ostream
00024     friend std::ostream & operator<< ( std::ostream &output, OpenGLXPolygonalModel<T> const &o )
00025     {
00026         output  << "\n======================\n"
00027                 <<   "TAPs::OpenGL::OpenGLXPolygonalModel<"
00028                 << typeid(T).name() << "> Class\n"
00029                 <<   "======================\n";
00030         //----------------------------------------------------------------
00031         // Material Node from OpenGLSupport
00032         output  << "\nMaterial Node" << "\n{\n" << o.material << "\n}";
00033         //----------------------------------------------------------------
00034         // Nodes from XPolygonalModel<T>
00035         output  << "\n\nVertices " << o.m_iNoVertices << "\n{";
00036         for ( int i = 0; i < o.m_iNoVertices; ++i ) {
00037             output << "\n  #" << i << "\t" << o.m_prXVertex[i];
00038         }
00039         output  << "\n}";
00040         //----------------------------------------------------------------
00041         // Neighbor vertex ring#1
00042         if ( o.m_pviVertexRing1List ) {
00043             std::vector<int>::const_iterator iterator;
00044             output  << "\n\nVertexRing1 " << o.m_iNoVertices << "\n{";
00045             for ( int i = 0; i < o.m_iNoVertices; ++i ) {
00046                 output << "\n  #" << i;
00047                 for (   iterator = o.m_pviVertexRing1List[i].begin(); 
00048                         iterator != o.m_pviVertexRing1List[i].end();
00049                         ++iterator )
00050                 {
00051                     output << "\t" << *iterator;
00052                 }
00053             }
00054             output  << "\n}";
00055         }
00056         //----------------------------------------------------------------
00057         // Faces Node
00058         output  << "\n\nFaces " << o.m_iNoFaces  << "\n{";
00059         for ( int i = 0; i < o.m_iNoFaces; ++i ) {
00060             output << "\n  #" << i << "\t" << o.m_prFace[i];
00061         }
00062         output  << "\n}";
00063         return output;
00064     }
00065 //-----------------------------------------------------------------------------
00066 // Member Functions  -----------------------------------------------------------
00067     // Inherited from OpenGLSupport class
00068     virtual void DisplayGLFaceRange ( 
00069         int startFace, int endFace, 
00070         OpenGL::Enum::DrawMode DM = OpenGL::Enum::POLYGON );
00071 public:
00072     //-------------------------------------------------------------------------
00073     // default constructor
00074     OpenGLXPolygonalModel();
00075     //-------------------------------------------------------------------------
00076     // destructor
00077     virtual ~OpenGLXPolygonalModel();
00078     //-------------------------------------------------------------------------
00079     //void DisplayGL()
00080     //virtual void DisplayGL( OpenGL::Enum::DrawMode DM = OpenGL::Enum::POLYGON );
00081     virtual inline void ToggleDisplayVertexNormals ()
00082     { bIsDisplayVertexNormals = !bIsDisplayVertexNormals; }
00083     //-------------------------------------------------------------------------
00084 
00085 #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00086     virtual bool EnableVertexColors ( bool b );
00087 #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00088 
00089 protected:
00090     //-------------------------------------------------------------------------
00091     // Helper Fn
00092     // void DrawGL()
00093     virtual void DrawGL( GLenum );
00094     //*
00095     virtual void DrawGLFaceRange ( int startFace, int endFace, GLenum );
00096     //*/
00097 
00098 #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00099     virtual void DrawGLWithFaceVertexColor_RGB  ( GLenum );
00100     virtual void DrawGLWithFaceVertexColor_RGBA ( GLenum );
00101 #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00102 
00103 // Render by GLSL -------------------------------------------------------------
00104 #ifdef  TAPs_RENDER_BY_GLSL_DS_FACE_VERTEX
00105     virtual void DrawGLSLWithDSFaceVertex_RGB   ( GLenum );
00106     virtual void DrawGLSLWithDSFaceVertex_RGBA  ( GLenum );
00107 #endif//TAPs_RENDER_BY_GLSL_DS_FACE_VERTEX
00108 // ----------------------------------------------------------------------------
00109 
00110 //-----------------------------------------------------------------------------
00111 // Data Members  ---------------------------------------------------------------
00112 protected:
00113     //-------------------------------------------------------------------------
00114     bool bIsDisplayVertexNormals;
00115 };
00116 //=============================================================================
00117 END_NAMESPACE_TAPs__OpenGL
00118 //-----------------------------------------------------------------------------
00119 // Include definition if TAPs_USE_EXPORT is not defined
00120 //#if !defined( TAPs_USE_EXPORT )
00121     #include "TAPsOpenGLXPolygonalModel.cpp"
00122 //#endif
00123 //-----------------------------------------------------------------------------
00124 #endif
00125 //345678901234567890123456789012345678901234567890123456789012345678901234567890
00126 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines