DisplayMesh.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:4k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // DisplayMesh.h
  3. // Matt Ginzton
  4. // Wed Jul  1 15:08:21 PDT 1998
  5. // 
  6. // Rendering code for mesh data
  7. //############################################################
  8. #ifndef _DISPLAYMESH_H_
  9. #define _DISPLAYMESH_H_
  10. #include "RigidScan.h"
  11. #include "TextureObj.h"
  12. #include "defines.h"
  13. #include <vector.h>
  14. class DisplayableOrganizingMesh;
  15. // abstract base class
  16. class DisplayableMesh
  17. {
  18.  public:
  19.   DisplayableMesh();
  20.   virtual ~DisplayableMesh();
  21.   virtual void     drawSelf (bool bAllowList = true) = 0; // applies transform,
  22.   // sets modes, etc.  Set bAllowList false if you might be rendering with
  23.   // parameters other than those encapsulated in a display list.
  24.   virtual void     drawList() = 0;      // entry points for things that want to
  25.   virtual void     drawImmediate() = 0; // set their own modes/transforms
  26.                                         // and just get the geometry
  27.   // display list accessors
  28.   virtual bool     useDisplayList (void) const = 0;
  29.   virtual void     useDisplayList (bool bUseNow) = 0;
  30.   virtual void     invalidateCachedData (void) = 0;
  31.   // other accessors
  32.   RigidScan*    getMeshData (void) const;
  33.   void          resetMeshData (RigidScan* _meshData);
  34.   const char*   getName (void) const;
  35.   virtual void  setName (const char* baseName);
  36.   bool     getVisible (void);
  37.   void     setVisible (bool bVis = true);
  38.   const vec3uc& getFalseColor (void) const;
  39.   void          setFalseColor (const vec3uc& color);
  40.   virtual void     setHome (void) = 0;
  41.   virtual void     goHome  (void) = 0;
  42.   virtual void     setBlend (bool newBlend, float newAlpha) = 0;
  43.   virtual bool     transparent (void) = 0;
  44.   virtual void     setTexture(Ref<TextureObj> newtexture) = 0;
  45.  protected:
  46.   RigidScan*          meshData;
  47.   bool                bVisible;
  48.   char*               displayName;
  49.   vec3uc              colorFalse;
  50. };
  51. // concrete subclass representing a real mesh
  52. class DisplayableRealMesh: public DisplayableMesh
  53. {
  54.  public:
  55.   DisplayableRealMesh (RigidScan* _meshData, char* nameBase = NULL);
  56.   ~DisplayableRealMesh();
  57.   void     drawSelf (bool bAllowList = true); // applies transform,
  58.   // sets modes, etc.  Set bAllowList false if you might be rendering with
  59.   // parameters other than those encapsulated in a display list.
  60.   void     drawList();       // entry points for things that want to
  61.   void     drawImmediate();  // set their own modes/transforms and just
  62.                              // get the geometry
  63.   // display list accessors
  64.   bool     useDisplayList (void) const;
  65.   void     useDisplayList (bool bUseNow);
  66.   void     invalidateCachedData (void);
  67.   // other accessors
  68.   //RigidScan*  getMeshData (void) const;
  69.   //void        resetMeshData (RigidScan* _meshData);
  70.   //const char* getName (void) const;
  71.   //bool     getVisible (void);
  72.   //void     setVisible (bool bVis = true);
  73.   //const vec3uc& getFalseColor (void) const;
  74.   //void          setFalseColor (const vec3uc& color);
  75.   void     setHome (void);
  76.   void     goHome  (void);
  77.   void     setBlend (bool newBlend, float newAlpha);
  78.   bool     transparent (void);
  79.   void     setTexture(Ref<TextureObj> newtexture);
  80.  private:   // private helpers
  81.   typedef RigidScan::ColorSource ColorSource;
  82.   void     drawBoundingBox();
  83.   void     drawImmediateOnce();
  84.   void     invalidateDisplayList();
  85.   void     setMaterials (int& colorSize, RigidScan::ColorSource& colorSource);
  86.   void     getMeshTransport (bool perVertex, bool strips,
  87.      ColorSource color, int cbColor);
  88.   void     renderMeshTransport();
  89.   void     renderMeshArrays();
  90.   void     renderMeshSingle();
  91.   void     setName (const char* baseName);
  92.  private:    // private data
  93.   bool       bUseDisplayList;
  94.   int        iDisplayList;
  95.   bool       bBlend;
  96.   float      alpha;
  97.   Ref<TextureObj> myTexture;
  98.   TbObj      homePos;
  99.   // stuff that's set each time through drawSelf
  100.   class ScreenBox* mBounds;
  101.   bool       bManipulating;
  102.   // cached mesh data returned from meshData->mesh()
  103.   class DrawData
  104.     {
  105.     public:
  106.       bool           bPerVertex;
  107.       bool           bStrips;
  108.       ColorSource    color;
  109.       int            cbColor;
  110.       MeshTransport* mesh;
  111.       vector<vector<int> > StripInds;
  112.     };
  113.   DrawData   cache[2]; // current res, lo res preview
  114.   void     buildStripInds(DrawData& cache);
  115. };
  116. // safe access to mesh data from a possibly null DisplayableMesh
  117. RigidScan* MeshData (DisplayableMesh* disp);
  118. #endif //_DISPLAYMESH_H_