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 51 52
|
// Calcul du frustum de la vue
void Map :: calculateFrustrum()
{
static bool init_frustrum = true; // Indique si c'est le premier passage
// Calcul du frustrum
/**********************************/
// Si changement de vue ou premier passage
if (c_ext != this->extremum || init_frustrum)
{
// Nouveaux extremum et chargement des données
this->extremum = c_ext; // nouveau frustrum
loadDataFromFile();
init_frustrum = false; // ce n'est plus le premier passage
}
}
// Chargement des données (vertices/ normales) et calculs (couleurs etc..)
void Map :: loadDataFromFile()
{
// Ouverture du fichier en lecture
std::ifstream r_file("datamap.m3d",std::ios_base::binary);
// Lectures des valeurs du fichier
// x_min, x_max, z_min, z_max viennent du frustrum
for (Uint32 z = z_min; z< z_max; ++z)
{
Uint32 first_value = z*MAP_SIZE + x_min;
// Les coordonnées d'abord
r_file.seekg(3*sizeof(GLfloat)*first_value,std::ios_base::beg);
r_file.read(reinterpret_cast<char*>(&this->vertices[3*delta_x*
(z-z_min)]),3*sizeof(GLfloat)*delta_x);
// Ensuite les normales qui sont en fin de fichier
r_file.seekg(3*sizeof(GLfloat)*first_value + 3*sizeof(GLfloat)
*MAP_SIZE*MAP_SIZE,std::ios_base::beg);
r_file.read(reinterpret_cast<char*>(&normals[3*delta_x*
(z-z_min)]),3*sizeof(GLfloat)*delta_x);
}
r_file.close();
// Calculs de couleurs, d'indices etc...
/******************************/
} |
Partager