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
| // Détermination des extrémums, 4 points limites pour dégrossir le terrain
int map_size = this->size; // taille de la carte
int foot = map_size/50; // pas
// Liste de chaque extremum trouvé ...
std::list<int> abs;
std::list<int> ord;
// On découpe le terrain en carrés. Si un des points des extremité est dans le vue (fonction isInside)alors on va afficher cette portion de terrain
for (int k=0; k< map_size-foot; k=k+foot)
{
for (int l=0; l< map_size-foot; l=l+foot)
{
Vecteur3D<GLfloat> u_left(l/DataMap::QUALITY,0,k/DataMap::QUALITY);
Vecteur3D<GLfloat> u_right((l+foot)/DataMap::QUALITY,0,k/DataMap::QUALITY);
Vecteur3D<GLfloat> d_left(l/DataMap::QUALITY,0,(k+foot)/DataMap::QUALITY);
Vecteur3D<GLfloat> d_right((l+foot)/DataMap::QUALITY,0,(k+foot)/DataMap::QUALITY);
if (isInside(u_left) || isInside(u_right) || isInside(d_left) || isInside(d_right))
{
abs.push_back(l);
abs.push_back(l+foot);
ord.push_back(k);
ord.push_back(k+foot);
}
}
}
// Tri
abs.sort(); // Toutes les abscisses que j'ai repérées et triées
ord.sort(); // Toutes les ordonnées repérées et triées
// On en déduit les valeurs limites trouvées. on met 300 en valeur mini qui correspond au maximum lointain visible (gluPerspective)
this->thread_extremum[0] = abs.front();
this->thread_extremum[1] = Max(abs.back(),300);
this->thread_extremum[2] = ord.front();
this->thread_extremum[3] = Max(ord.back(),300); |