Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

heightfield.h File Reference

Go to the source code of this file.

Functions

void initHeightField ()
 Initialize the height field.

void drawHeightField (float x, float y, int w, int h)
 Draw the height field.


Function Documentation

void drawHeightField float  x,
float  y,
int  w,
int  h
 

Draw the height field.

The field is placed in the XY plane centered in (0,0,0). A transformation is set up so that the height field position (x,y) is moved into the origin, and w x h tiles around this position are drawn. Each tile covers g_cellsize square units in OpenGL coordinates.

Definition at line 109 of file heightfield.cpp.

References renderGroundQuad(), TEX_ROCK, TEX_SNOW, and texture().

Referenced by renderScene().

00110 {
00111   // Automatic normals do not work correctly for a height field,
00112   // because there is no interaction between two adjacent strips.
00113   // In the solution, you will have to compute the normals of
00114   // the field yourself.
00115   glEnable( GL_AUTO_NORMAL );
00116 
00117   // Enable the grass texture
00118   glBindTexture( GL_TEXTURE_2D, texture( TEX_SNOW ));
00119   glEnable( GL_TEXTURE_2D );
00120 
00121   // Render ground once
00122   renderGroundQuad( w,h );
00123 
00124   // Allow equal depth buffer values, otherwise the quad is not rendered
00125   // a second time
00126   glDepthFunc( GL_LEQUAL );
00127 
00128   // Switch to the second texture
00129   glDisable( GL_TEXTURE_2D );
00130   glBindTexture( GL_TEXTURE_2D, texture( TEX_ROCK ));
00131   glEnable( GL_TEXTURE_2D );
00132 
00133   // Setup blending so that it blends with the framebuffer and the new
00134   // geometry using the value in the alpha channel as a weight
00135   glBlendEquation( GL_ADD );
00136   glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
00137 
00138   // Switch on alpha blending, and render ground again
00139   glEnable( GL_BLEND );
00140   renderGroundQuad( w,h );
00141 
00142 
00143   // Reset rendering state
00144   glDepthFunc( GL_LESS );
00145   glDisable( GL_BLEND );
00146   glDisable( GL_TEXTURE_2D );
00147   glDisable( GL_AUTO_NORMAL );
00148 }

void initHeightField  ) 
 

Initialize the height field.

The field data is loaded as g_hfW*g_hfH continuous raw floats from the file.

Definition at line 15 of file heightfield.cpp.

References g_hf, g_hfH, g_hfW, g_strHeightFieldFile, and g_strResourceDir.

Referenced by initGL().

00016 {
00017   // Validate params
00018   int W = g_hfW;
00019   int H = g_hfH;
00020   assert( W>0 && W*H > 0 );
00021   // Clear old data
00022   if (g_hf != NULL) {
00023     delete[] g_hf;
00024   }
00025 
00026   // Init new data
00027   g_hf = new float[W*H];
00028   memset( g_hf,0, W*H*sizeof(float) );
00029 
00030   // Read data from file
00031   char filename[500];
00032   strcpy( filename, g_strResourceDir );
00033   strcat( filename, g_strHeightFieldFile );
00034   printf( "Reading height field %s\n", filename );
00035 
00036   FILE *file = fopen( filename, "rb" );
00037   assert( file != NULL );
00038   int n;
00039   if ( (n=fread( g_hf, sizeof(float), W*H, file )) != W*H) {
00040     printf( "Error loading height field, only %i floats read.", n ); 
00041   }
00042   else {
00043     printf( "read %i floats ... ", n );
00044   }
00045 }


Generated on Thu Jan 20 02:47:13 2005 for Projective_Texture_Effect_Demo by doxygen 1.3.6