gre/3dutils.h

Go to the documentation of this file.
00001 /*** 
00002  * \file 3dutils.h <gre/3dutils.h>
00003  * \brief supporting structures
00004  *
00005  * \if NODOC
00006  * $Id: 3dutils.h_v 1.20 2006/10/05 20:09:49 mju Exp $
00007  *
00008  * $Log: 3dutils.h_v $
00009  * Revision 1.20  2006/10/05 20:09:49  mju
00010  * Use color hdr.
00011  *
00012  * Revision 1.19  2006/09/19 16:16:57  scowan
00013  * *** empty log message ***
00014  *
00015  * Revision 1.18  2006/09/19 16:12:46  scowan
00016  * Fixed style changes and removed unnecessary include files.
00017  *
00018  * Revision 1.17  2005/07/22 21:50:00  vdronov
00019  * added bitmap pattern rendering
00020  *
00021  * Revision 1.16  2005/06/27 17:13:58  vdronov
00022  * added nullmask handling
00023  *
00024  * Revision 1.15  2005/04/08 19:09:41  vdronov
00025  * *** empty log message ***
00026  *
00027  * Revision 1.14  2005/03/11 00:27:05  vdronov
00028  * *** empty log message ***
00029  *
00030  * Revision 1.13  2005/02/17 17:56:53  vdronov
00031  * *** empty log message ***
00032  *
00033  * Revision 1.12  2004/12/01 18:12:01  vdronov
00034  * ALIGN
00035  *
00036  * Revision 1.11  2004/08/11 23:04:31  vdronov
00037  * *** empty log message ***
00038  *
00039  * Revision 1.10  2004/07/30 22:01:50  vdronov
00040  * added DRAW3DMODE
00041  *
00042  * Revision 1.9  2003/09/15 13:48:59  fileserver!dwilliss
00043  * Doxygen
00044  *
00045  * Revision 1.8  2003/08/15 20:01:58  vdronov
00046  * add docs.
00047  *
00048  * Revision 1.7  2003/07/30 14:42:18  mju
00049  * Check inclusion guards.
00050  * Ignore private sections.
00051  *
00052  * Revision 1.5  2003/04/22 19:52:02  vdronov
00053  * added pixalization
00054  *
00055  * Revision 1.2  2003/04/08 17:50:23  vdronov
00056  * changed triangulation structure
00057  *
00058  * Revision 1.1  2003/03/10 15:08:51  vdronov
00059  * Initial revision
00060  * \endif
00061  */ 
00062 
00063 #ifndef  INC_GRE_3DUTILS_H
00064 #define  INC_GRE_3DUTILS_H
00065 
00066 #ifndef  INC_MI32_ASURFACE_H
00067 #include <mi32/asurface.h>
00068 #endif
00069 
00070 #ifndef  INC_MI32_BITSET_H
00071 #include <mi32/bitset.h>
00072 #endif
00073 
00074 #ifndef  INC_MI32_SIMPLEAR_H
00075 #include <mi32/simplear.h>
00076 #endif
00077 
00078 #ifndef  INC_MI32_DOUBLEAR_H
00079 #include <mi32/doublear.h>
00080 #endif
00081 
00082 #ifndef  INC_MI32_COLOR_H
00083    #include <mi32/color.h>
00084 #endif
00085 
00086 #ifndef _VECTOR_
00087 #include <vector>
00088 #endif
00089 
00090 namespace RVC {
00091 #ifndef GENERATING_DOXYGEN_OUTPUT
00092 class RASTER;
00093 class STYLEPATTERN_BITMAP;
00094 #endif //!< GENERATING_DOXYGEN_OUTPUT
00095 }
00096 
00097 namespace GRE {
00098 
00099 #ifndef GENERATING_DOXYGEN_OUTPUT
00100 class TERRAIN;
00101 class TEXTURE;
00102 class TEXTUREFILTER;
00103 #endif //!< GENERATING_DOXYGEN_OUTPUT
00104 
00105 enum DRAW3DMODE {
00106    DRAW3DMODE_Texture = 0,
00107    DRAW3DMODE_Color = 1,
00108    DRAW3DMODE_Wireframe = 2,
00109    DRAW3DMODE_PointsField = 3,
00110    DRAW3DMODE_Bitmap = 4
00111    };
00112 
00113 enum TRIANGLEMODE {
00114    TRIANGLEMODE_List = 0,
00115    TRIANGLEMODE_Fan = 1,
00116    TRIANGLEMODE_Strip = 2,
00117    TRIANGLEMODE_TIN = 3
00118    };
00119 
00120 struct TRIANGLEINDEX {
00121    INT32 vertex1;
00122    INT32 vertex2;
00123    INT32 vertex3;
00124 
00125    TRIANGLEINDEX () : vertex1(0), vertex2(0), vertex3(0) {};
00126    TRIANGLEINDEX (INT32 v1, INT32 v2, INT32 v3) : vertex1(v1), vertex2(v2), vertex3(v3) {};
00127    };
00128 
00129 struct EDGEINDEX {
00130    INT32 vertexfrom;
00131    INT32 vertexto;
00132    EDGEINDEX () : vertexfrom(0), vertexto(0) {};
00133    EDGEINDEX (INT32 vf, INT32 vt) : vertexfrom(vf), vertexto(vt) {};
00134    };
00135 
00136 struct INDEX {
00137    INT32 index;
00138    INDEX () : index(0) {};
00139    INDEX (INT32 i) : index(i) {};
00140    };
00141 
00142 struct TRIANGULATION {
00143 
00144    TRIANGLEMODE m_Mode;
00145 
00146    SIMPLE_ARRAY<FPOINT3D> m_Vertices;
00147    SIMPLE_ARRAY<INDEX> m_Indices;
00148    SIMPLE_ARRAY<EDGEINDEX> m_Edges;                //!< used in TRIANGLEMODE_TIN
00149    SIMPLE_ARRAY<TRIANGLEINDEX> m_Triangles;        //!<  used in TRIANGLEMODE_TIN
00150    BITSET m_EdgesBits;                             //!<  used in TRIANGLEMODE_TIN
00151    BITSET m_TrianglesBits;                         //!<  used in TRIANGLEMODE_TIN
00152 
00153    DRAW3DMODE m_Draw3DMode;
00154 
00155    TERRAIN *m_Terrain;
00156    TEXTURE *m_Texture;
00157    TEXTUREFILTER *m_TextureFilter;
00158 
00159    COLOR m_Color;
00160 
00161    TRIANGULATION (
00162       ) :
00163       m_Mode(TRIANGLEMODE_List),
00164       m_Draw3DMode(DRAW3DMODE_Texture),
00165       m_Terrain(0),
00166       m_Texture(0),
00167       m_TextureFilter(0)
00168       {
00169       };
00170 
00171    ~TRIANGULATION (
00172       ) {
00173       };
00174 
00175    };
00176 
00177 typedef std::vector<const TRIANGULATION*> TRIANGULATIONVECTOR; 
00178 
00179 struct PIXALIZATION {
00180 
00181    SIMPLE_ARRAY<LPOINT2D> m_Pixels;
00182    DOUBLE_ARRAY<DPOINT3D> m_Points;
00183    DOUBLE_ARRAY<DPOINT3D> m_Points0;
00184    DOUBLE_ARRAY<DPOINT3D> m_Points1;
00185    DOUBLE_ARRAY<DPOINT3D> m_Points2;
00186 
00187    DRAW3DMODE m_Draw3DMode;
00188 
00189    TERRAIN *m_Terrain;
00190    TEXTURE *m_Texture;
00191    TEXTUREFILTER *m_TextureFilter;
00192 
00193    COLOR m_Color;
00194 
00195    RVC::STYLEPATTERN_BITMAP* m_BitmapPattern;
00196 
00197    PIXALIZATION (
00198       ) :
00199       m_Draw3DMode(DRAW3DMODE_Texture),
00200       m_Terrain(0),
00201       m_Texture(0),
00202       m_TextureFilter(0)
00203       {
00204       };
00205 
00206    ~PIXALIZATION (
00207       ) {
00208       };
00209 
00210    };
00211 
00212 typedef std::vector<const PIXALIZATION*> PIXALIZATIONVECTOR; 
00213 
00214 //! SCREENPLANE class describes plane in screen space in homogenius coordinates.
00215 class SCREENPLANE {
00216 
00217 public:
00218 
00219    SCREENPLANE (                                //! Constructor 
00220       ) : 
00221       m_IsSet(false),
00222       m_DX(0.0), 
00223       m_DY(0.0), 
00224       m_DW(1.0) 
00225       {};
00226 
00227    ~SCREENPLANE (                               //! Destructor 
00228       ) {};
00229 
00230    //! Clear plane parameters
00231    void Clear (
00232       ) { m_IsSet = false; return;};
00233 
00234    //! Is plane set
00235    //! 
00236    //! @return true if plane is set
00237    bool IsSet (
00238       ) const { return m_IsSet; };
00239 
00240    //! Set plane by three points in homogenius coordinates.
00241    void Set (
00242       const DPOINT3DH& pt1, 
00243       const DPOINT3DH& pt2, 
00244       const DPOINT3DH& pt3
00245       );
00246 
00247    //! Get point on screen plane that projected to screen at center of screen pixel with coordinates (column, line)
00248    //! 
00249    //! @return true if point exists
00250    bool GetPoint (
00251       const INT32 line,
00252       const INT32 column,
00253       DPOINT3DH& point
00254       );
00255 
00256    //! Get extents on screen plane that projected to screen at screen pixel with coordinates (column, line)
00257    //! 
00258    //! @return true if extents exist
00259    bool GetCellExtents (
00260       const INT32 line,
00261       const INT32 column,
00262       DPOINT3DH hpoints[4]
00263       );
00264 
00265 private:
00266    #ifndef GENERATING_DOXYGEN_OUTPUT
00267 
00268    double ALIGN8(m_DX); 
00269    double ALIGN8(m_DY); 
00270    double ALIGN8(m_DW); 
00271    double ALIGN8(m_DL);
00272    double ALIGN8(m_DXZ);
00273    double ALIGN8(m_DYZ);
00274    double ALIGN8(m_DWZ);
00275    bool m_IsSet;
00276 
00277    #endif //!< GENERATING_DOXYGEN_OUTPUT
00278    };
00279 
00280 
00281 //! UTILS3D class contains supportive static methods
00282 class UTILS3D {
00283    public:
00284 
00285       enum CELLTRACE {
00286          CELLTRACE_Edge,
00287          CELLTRACE_Center
00288          };
00289 
00290 
00291       static UINT8 log2i (
00292          const UINT32 value,
00293          const bool up = true
00294          );
00295 
00296       static ERRVALUE CreateBoundaryRegionFromRaster (
00297          SIMPLE_ARRAY<RVC::RASTER*>& rasters,
00298          RVC::RASTER& mask,
00299          REGION2D& region,
00300          const CELLTRACE celltrace
00301          );
00302 
00303    private:
00304       #ifndef GENERATING_DOXYGEN_OUTPUT
00305 
00306       UTILS3D ();
00307       ~UTILS3D ();
00308 
00309       #endif //!< GENERATING_DOXYGEN_OUTPUT
00310    };
00311 
00312 
00313 };    //! End of namespace
00314 
00315 #endif
00316 

Generated on Thu Apr 26 04:03:30 2007 for TNTsdk by  doxygen 1.5.2