Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

renderer.h

00001 /***************************************************************************
00002                         renderer.h  -  description
00003                             -------------------
00004     begin                : jeu mai 29 2003
00005     copyright            : (C) 2003-2006 by Duong-Khang NGUYEN
00006     email                : neoneurone @ users sourceforge net
00007     
00008     $Id: renderer.h 65 2006-10-22 09:46:47Z neoneurone $
00009  ***************************************************************************/
00010 
00011 /***************************************************************************
00012  *                                                                         *
00013  *   This program is free software; you can redistribute it and/or modify  *
00014  *   it under the terms of the GNU General Public License as published by  *
00015  *   the Free Software Foundation; either version 2 of the License, or     *
00016  *   any later version.                                                    *
00017  *                                                                         *
00018  ***************************************************************************/
00019 
00020 #ifndef _OPENCITY_RENDERER_H_
00021 #define _OPENCITY_RENDERER_H_ 1
00022 
00023 #include "main.h"
00024 
00025 
00026 // OpenGL viewport default parameters
00027 #define OC_VIEW_ANGLE       50.0
00028 #define OC_Z_NEAR           0.1
00029 #define OC_Z_NEAR_ORTHO     -1000
00030 #define OC_Z_FAR            1000.0
00031 
00032 // OpenGL projection type paramaters
00033 #define OC_PERSPECTIVE      1
00034 #define OC_ORTHOGONAL       2
00035 
00036 
00037 class Layer;
00038 class Map;
00039 
00040 
00041 //========================================================================
00045 class Renderer
00046 {
00047 public:
00048     Renderer(
00049         const uint cityW,
00050         const uint cityL );
00051 
00052     ~Renderer();
00053 
00054 
00055     void RotateLeft( const uint & factor = 1 );
00056     void RotateRight( const uint & factor = 1 );
00057     void MoveLeft( const uint & factor = 1 );
00058     void MoveRight( const uint & factor = 1 );
00059     void MoveUp( const uint & factor = 1 );
00060     void MoveDown( const uint & factor = 1 );
00061 
00062 
00063 //========================================================================
00066     void Home();
00067 
00068     void ZoomIn(  );
00069     void ZoomOut(  );
00070 
00071     void ToggleGrid();
00072     void ToggleCompass();
00073     void ToggleProjection();
00074     void ToggleWireFrame();
00075 
00076 
00077 //========================================================================
00080     void
00081     DisplaySplash(
00082         const uint & rcuiX = 0,
00083         const uint & rcuiY = 0 );
00084 
00085 
00086 //========================================================================
00090     void
00091     Display(
00092         const Map* pcMap,
00093         const Layer* pcLayer );
00094 
00095 
00096     void
00097     DisplayHighlight(
00098         const Map* pcMap,
00099         const Layer* pcLayer,
00100         const OPENCITY_TOOL_CODE & enumTool );
00101 
00102 
00103     void
00104     DisplayHighlight(
00105         const Map* pcMap,
00106         const Layer* pcLayer,
00107         uint uiW1,
00108         uint uiL1,
00109         uint uiW2,
00110         uint uiL2,
00111         const OPENCITY_TOOL_CODE & enumTool );
00112 
00113 
00114 //========================================================================
00117     void DisplayBuildPreview(
00118         const uint & uiW,
00119         const uint & uiL,
00120         const GLubyte & rcubR,
00121         const GLubyte & rcubG,
00122         const GLubyte & rcubB,
00123         const OPENCITY_GRAPHIC_CODE & gcode ) const;
00124 
00125 
00126     void
00127     DisplaySelection(
00128         const Map* pcMap,
00129         const Layer* pcLayer );
00130 
00131 
00132     void
00133     DisplaySelection(
00134         const Map* pcMap,
00135         const Layer* pcLayer,
00136         const uint & rcuiW1,
00137         const uint & rcuiL1,
00138         const uint & rcuiW2,
00139         const uint & rcuiL2 );
00140 
00141 
00142 //========================================================================
00143     void
00144     DisplayText(
00145         const uint & rcuiX,
00146         const uint & rcuiY,
00147         const GLubyte & rcubR,
00148         const GLubyte & rcubG,
00149         const GLubyte & rcubB,
00150         const string & rcText );
00151 
00152 
00153     const bool
00154     GetSelectedWHFrom(
00155         const uint & rcuiMouseX,
00156         const uint & rcuiMouseY,
00157         uint & ruiW,
00158         uint & ruiL,
00159         const Map* pcMap,
00160         const Layer* pcLayer );
00161 
00162 
00163     const bool
00164     GetSelectedWHFrom(
00165         const uint & rcuiMouseX,
00166         const uint & rcuiMouseY,
00167         uint & ruiW,
00168         uint & ruiL,
00169         const Map* pcMap,
00170         const Layer* pcLayer,
00171         const uint & rcuiW1,
00172         const uint & rcuiL1,
00173         const uint & rcuiW2,
00174         const uint & rcuiL2 );
00175 
00176 
00177 //========================================================================
00182     void SetWinSize(
00183         const int & rciWidth,
00184         const int & rciHeight );
00185 
00186 
00187 //========================================================================
00192     bool boolHeightChange;
00193 
00194 
00195 private:
00196     bool bDisplayGrid;
00197     bool bDisplayCompass;
00198     bool bWireFrame;
00199     OC_UBYTE ubProjectionType;
00200     GLfloat fScaleRatio;
00201     GLfloat fXTransDelta;   
00202     GLfloat fZTransDelta;
00203 
00204     GLdouble dEyeX;         
00205     GLdouble dEyeY;         
00206     GLdouble dEyeZ;
00207 
00208 // GL display lists
00209     GLuint _uiGridList;     
00210     GLuint _uiFontBase;     
00211     GLuint _uiTerrainList;  
00212     GLuint _uiWaterList;    
00213 
00214 // Frequently use textures
00215     GLuint _uiTerrainTex;   
00216     GLuint _uiWaterTex;     
00217     GLuint _uiSplashTex;    
00218 
00219 
00223     GLdouble dDeltaX;
00224 
00228     GLdouble dDeltaZ;
00229 
00231     GLdouble dYRotateAngle;
00232     GLdouble dmatrixRotate[16];
00233 
00235     int iWinHeight;
00236     int iWinWidth;
00237 
00239     uint _uiCityWidth;
00240     uint _uiCityLength;
00241 
00243     SDL_Surface* psurfaceScreen;
00244 
00245    /*=====================================================================*/
00246    /*                        PRIVATE     METHODS                          */
00247    /*=====================================================================*/
00254     void _DisplayTerrain() const;
00255 
00256 
00257     void _DisplayWater() const;
00258 
00259 
00260 //========================================================================
00263     void
00264     _DisplayMapGrid(
00265         const Map* pcmap );
00266 
00267 
00268     void _DisplayCompass() const;
00269 
00270     void _DisplayStatusBar() const;
00271 
00272 
00273 //========================================================================
00276     void _PrepareView() const;
00277 
00278 };
00279 
00280 #endif
00281 
00282 
00283 
00284 
00285 
00286 
00287 
00288 
00289 
00290 
00291 
00292 
00293 
00294 
00295 
00296 
00297 
00298 
00299 
00300 
00301 
00302 
00303 
00304 
00305 
00306 
00307 
00308 

Generated on Sat Nov 11 10:21:10 2006 for OpenCity by  doxygen 1.4.2