#include "ocean.h" #include #include #include #include #include #include #include #include Ocean::Ocean(QString spectre, int nbvague, int nb_x, int nb_z) { if (!spectre.isEmpty()){ nombre_de_vagues = nbvague; if(!loadSpectre(spectre)) qDebug()<< "tes spectre de vague son suspecte bruh! puisque c'est comme ça au revoir"<< endl; if(!loadMap(nb_x,nb_z)) qDebug()<< "sorry cet map est suspect bruh! essayons a nouveau" < xline; for(int z = 0; z < zs; z ++) xline.push_back(Vpoint(point3D(x*x_size,0,z*z_size), point3D(0.0,0.0,0.0))); Maillage.push_back(xline); } // replassage liste face for(uint i = 1; i < Maillage.size()-1; i++){ for(uint p = 0; p< Maillage[i].size()-1; p++){ //demi triangle 1 lfaces.push_back( face( sommet(i-1,p), sommet(i,p), sommet(i-1,p+1) )); //demie quad 2 lfaces.push_back( face( sommet(i,p), sommet(i,p+1), sommet(i-1,p+1) )); } } calcule_coordonnees_texture(); calcul_normales_faces(); if(smooth) calcul_normales_points(); return true; } void Ocean::calcule_coordonnees_texture() { double x= (double)Maillage.size(); for(uint i = 0; i < Maillage.size(); i++){ double y= (double)Maillage[i].size(); // cas ou y variable (evolution ultérieur) for(uint p = 0; p< Maillage[i].size(); p++){ Maillage[i][p].s = (double)i / x; Maillage[i][p].t = (double)p / y; } } } void Ocean::calcul_normales_points() { for(uint i = 0; i < Maillage.size(); i++){ for(uint p = 0; p< Maillage[i].size(); p++){ Maillage[i][p].normale = point3D(0,0,0); } } for(uint i =0; i< lfaces.size(); i++) { Maillage[lfaces[i].S1.i][lfaces[i].S1.j].normale = Maillage[lfaces[i].S1.i][lfaces[i].S1.j].normale + lfacesnormales[i] ; Maillage[lfaces[i].S2.i][lfaces[i].S2.j].normale = Maillage[lfaces[i].S2.i][lfaces[i].S2.j].normale + lfacesnormales[i] ; Maillage[lfaces[i].S3.i][lfaces[i].S3.j].normale = Maillage[lfaces[i].S3.i][lfaces[i].S3.j].normale + lfacesnormales[i] ; point3D::normalize(Maillage[lfaces[i].S1.i][lfaces[i].S1.j].normale ); point3D::normalize(Maillage[lfaces[i].S2.i][lfaces[i].S2.j].normale ); point3D::normalize(Maillage[lfaces[i].S2.i][lfaces[i].S2.j].normale); } } void Ocean::calcul_normales_faces() { lfacesnormales.clear(); point3D v1; point3D v2; //qDebug()<< "taille vide = "<