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

Generated on Thu Apr 26 04:44:38 2007 for TNTsdk by  doxygen 1.5.2