home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / 3DTOSHI2.ZIP / mpg3d / include / G3dpobj.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  4KB  |  137 lines

  1.  
  2. // g3dpobj.h
  3. //
  4. // Copyright (c) 1996 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #ifndef __G3DPOBJ_H__
  7. #define __G3DPOBJ_H__
  8.  
  9. #include "stdgfx.h"
  10. #include "g3dobj.h"
  11.  
  12. #define MIN_DETAIL  0
  13. #define MED_DETAIL  1
  14. #define MAX_DETAIL  2
  15.  
  16. #define OBJECT_TYPE_POLYHEDRON  1
  17.  
  18. #define CLOCK_WISE          TRUE
  19. #define COUNTER_CLOCK_WISE  FALSE
  20.  
  21. struct DETAILDATA
  22.   {
  23.     float MaxDistance;  // Maximum Distance for this detail
  24.     LONG ShadeFlags;     // Shade Detail Flags
  25.     LONG FaceFlags;      // Face Detail Flags
  26.   }; // End of DETAILDATA
  27.  
  28. struct GEOMETRYDATA
  29.   {
  30.     LONG NumPoints;
  31.     LONG NumPolys;
  32.     LONG *SharedCounts;   // Number of polys shares this point
  33.     BYTE *PointVisible;
  34.     
  35.     G3DPOLY *Polys;
  36.     
  37.     FLPVECTOR3D *FLPLocalPoints;
  38.     FLPVECTOR3D *FLPWorldPoints;
  39.     FLPVECTOR3D *FLPCameraPoints;
  40.     FLPVECTOR2D *FLPScreenPoints; 
  41.     
  42.     FLPVECTOR3D *FLPPointLocalNormals;
  43.     FLPVECTOR3D *FLPPointWorldNormals;
  44.     float *PointIntensities;
  45.     float *HazeValues;
  46.     float *InverseZ;  // 1/z for each vertices in Camera Coord
  47.     
  48.     FLPVECTOR3D **FLPPolyLocalPoints;  // Pointer to Point for First Vertex 
  49.     FLPVECTOR3D **FLPPolyWorldPoints;  //  of each polygon
  50.     FLPVECTOR3D *FLPPolyLocalNormals;
  51.     FLPVECTOR3D *FLPPolyWorldNormals;
  52.  
  53.     GEOMETRYDATA ();
  54.     ~GEOMETRYDATA ();
  55.  
  56.     BOOLEAN CreatePoints ( LONG NumPoints );
  57.     BOOLEAN CreatePolys ( LONG NumPolys );
  58.     VOID DestroyPoints ();
  59.     VOID DestroyPolys ();
  60.   }; // End of GEOMETRYDATA
  61.  
  62. struct MORPHDATA
  63.   {
  64.     LONG NumFrames;
  65.     LONG CurFrame;  
  66.     FLPVECTOR3D *FLPLocalPointsDelta;
  67.   }; // End of MORPHDATA  
  68.  
  69. class G3DPOLYHEDRON : public G3DOBJECT
  70.   {
  71.     protected :
  72.       LONG CurDetail;
  73.       DETAILDATA DetailData[3];
  74.       GEOMETRYDATA GeometryData;
  75.       MORPHDATA *MorphData;
  76.             
  77.       VOID InitGeometryData ();
  78.       VOID SetDetailData ( float Distance );
  79.       
  80.       VOID CheckMeshVisibility ( CAMERADATA *CameraData ); 
  81.       virtual VOID UpdateLocalToWorld ();
  82.       virtual VOID UpdateWorldToCamera ( G3DMATRIX CameraMatrix,
  83.                                          CAMERADATA *CameraData ); 
  84.       virtual VOID CountShapes ( LONG *Count );
  85.  
  86.       VOID CountPointShare ();
  87.       VOID ComputePolyLocalNormals ();
  88.       VOID ComputePointLocalNormals ();
  89.  
  90.       VOID GetPolyMinMax ();
  91.       float ComputeTforPoly ( FLPVECTOR3D Normal, FLPVECTOR3D Base, FLPVECTOR3D Dir );
  92.             
  93.     public :
  94.       BOOLEAN ClockWised;
  95.       BOOLEAN TextureMapped;
  96.     
  97.       G3DPOLYHEDRON ();
  98.       virtual ~G3DPOLYHEDRON ();
  99.  
  100.       VOID CreateGeometryData ( LONG NumPoints, LONG NumPolys );
  101.       VOID CreateGeometryPoints ( LONG NumPoints );
  102.       VOID CreateGeometryPolys ( LONG NumPolys );
  103.       VOID DestroyGeometryPoints ();
  104.       VOID DestroyGeometryPolys ();
  105.       VOID DestroyGeometryData ();
  106.  
  107.       DETAILDATA* GetDetailData ( LONG Level ) { return &(DetailData[Level]); };
  108.       LONG GetCurDetail () { return CurDetail; };
  109.       DETAILDATA* GetCurDetailData () { return &(DetailData[CurDetail]); };
  110.  
  111.       VOID SetMaterial ( G3DMATERIAL* Material );
  112.       VOID MapTexture ( float U0, float V0,
  113.                         float U1, float V1,
  114.                         float U2, float V2 );
  115.  
  116.       VOID SetFaceFlags ( LONG Level, LONG Flags );
  117.       VOID SetShadeFlags ( LONG Level, LONG Flags );
  118.       LONG GetFaceFlags ( LONG Level ) { return DetailData[Level].FaceFlags; };
  119.       LONG GetShadeFlags ( LONG Level ) { return DetailData[Level].ShadeFlags; };
  120.       
  121.       GEOMETRYDATA *GetGeometryData () { return &GeometryData; };
  122.       virtual VOID Init ();
  123.       
  124.       virtual VOID ComputeCenter ();
  125.       virtual float ComputeRadius ();
  126.       virtual VOID CheckCollision ( FLPVECTOR3D StartPt, FLPVECTOR3D EndPt,
  127.                                     COLLIDEDATA* CollideList, LONG *CurNum, LONG MaxNum,
  128.                                     float CollideDist, float Gap );
  129.       BOOLEAN CreateMorphData ( GEOMETRYDATA *TargetGeometry, LONG NumFrames );
  130.       VOID Warp ( LONG NumSteps );
  131.       VOID DestroyMorphData ();
  132.   }; // End of G3DPOLYHEDRON
  133.  
  134. #endif
  135.  
  136.  
  137.