1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
// On lie les différentes textures
// Texture générée procéduralement
glClientActiveTextureARB(GL_TEXTURE0);
glEnable( GL_TEXTURE_2D );
glTexCoordPointer(2,GL_FLOAT,0,&this->maCoords.textures[0]);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture( GL_TEXTURE_2D, this->maTexture.handle );
// Détail map
glClientActiveTextureARB(GL_TEXTURE1);
glEnable( GL_TEXTURE_2D );
glTexCoordPointer(2,GL_FLOAT,0,&this->maCoords.gmDetailTextures[0]);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture( GL_TEXTURE_2D, this->maDetail.handle );
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE);
glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2 );
glVertexPointer(3,GL_FLOAT,0,&this->maCoords.vertices[0]);
glColorPointer(4,GL_FLOAT,0,&this->maCoords.colors[0]);
glEnable(GL_FOG);
// Dessin du terrain par octree
for(int i=0; i< this->maVisibleTerrainChunks.size(); ++i)
{
Chunk& mChunk = this->maVisibleTerrainChunks[i];
unsigned int numFootedMapChunkAbs = CHUNK_SIZE/(mChunk.chFoot*MAP_FOOT) + 1;
// Dessin des triangles ligne par ligne selon les indices
for(int numRow =0; numRow < numFootedMapChunkAbs-1; ++numRow)
glDrawElements(MAP_TYPE,2*numFootedMapChunkAbs, GL_UNSIGNED_INT, &mChunk.getTabIndices()[2*numRow*numFootedMapChunkAbs]);
}
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glDisable( GL_TEXTURE_2D );
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D,0);
glClientActiveTexture(GL_TEXTURE1);
glDisable( GL_TEXTURE_2D );
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D,0); |
Partager