diff --git a/TP_Geom3D_2018/Projet_modeling/main.cpp b/TP_Geom3D_2018/Projet_modeling/main.cpp index a12054f62113f0e04a2768aec17d08f7f1862847..7946993cb0508dcd95d3caa604ff288469d5768d 100644 --- a/TP_Geom3D_2018/Projet_modeling/main.cpp +++ b/TP_Geom3D_2018/Projet_modeling/main.cpp @@ -16,20 +16,18 @@ const Vec3 GRIS = {0.5,0.5,0.5}; const Vec3 NOIR = {0,0,0}; - void draw_repere(const Primitives& prim, const Mat4& tr) { prim.draw_sphere(tr, BLANC); prim.draw_cylinder(tr*translate(1,0,0)* scale(2,0.5,0.5) * rotateY(90) , ROUGE); // X - prim.draw_cylinder(tr*translate(0,1,0)* scale(0.5,2,0.5) * rotateX(90) , VERT); //Y - prim.draw_cylinder(tr*translate(0,0,1) * scale(0.5,0.5,2) , BLEU); //Z + prim.draw_cylinder(tr*translate(0,1,0)* scale(0.5,2,0.5) * rotateX(90) , VERT); // Y + prim.draw_cylinder(tr*translate(0,0,1) * scale(0.5,0.5,2) , BLEU); // Z prim.draw_cone(tr*translate(2,0,0)* rotateY(90), ROUGE); prim.draw_cone(tr*translate(0,2,0)* rotateX(-90), VERT); prim.draw_cone(tr*translate(0,0,2), BLEU); } - void star(MeshQuad& m) { m.create_cube(); @@ -46,39 +44,121 @@ void star(MeshQuad& m) } } - void spirale(MeshQuad& m) { - m.create_cube(); + m.create_cube(); #pragma omp parallel for for(int i = 0 ; i < 250 ; i++) { - m.transfo_quad(4,rotateX(10)*translate(0.11,0,0)*scale(0.99)) ; - m.extrude_quad(4) ; + m.transfo_quad(12,rotateY(10)*translate(0,0.11,0)*scale(0.99)) ; + m.extrude_quad(12) ; } } -void test(MeshQuad& m ,int q, int n ) + +void inside_shape1(MeshQuad& m,int q, int count) { - if(n > 0) + int index; + if(count > 0) + { + m.extrude_quad(q); + m.extrude_quad(q); + m.shrink_quad(q,0.9f); + m.tourne_quad(q,5) ; + m.extrude_quad(q); + m.shrink_quad(q,0.5f); + m.extrude_quad(q); + m.decale_quad(q,1.2f); + + index = m.nb_quads()*4; + + inside_shape1(m,q, count-1); + + inside_shape1(m,index-4, count-1); + inside_shape1(m,index-8, count-1); + + inside_shape1(m,index-12, count-1); + inside_shape1(m,index-16, count-1); + + } +} + +void inside_shape2(MeshQuad& m,int q, int count) +{ + int index; + if(count > 0) { m.extrude_quad(q) ; - m.extrude_quad(q+16) ; - m.extrude_quad(q+8) ; - m.shrink_quad(q+4,0.85); + m.extrude_quad(q) ; + m.shrink_quad(q,0.5f) ; + m.extrude_quad(q) ; + m.decale_quad(q,5); + + index = m.nb_quads()*4; + inside_shape2(m,q, count-1); + + inside_shape2(m,index-4, count-1); + inside_shape2(m,index-8, count-1); + + inside_shape2(m,index-12, count-1); + inside_shape2(m,index-16, count-1); + } +} + +void inside_shape3(MeshQuad& m,int q, int count) +{ + if(count >= 1){ + #pragma omp parallel for + for(int i = 0 ; i < 17 ; i++) + { + m.extrude_quad(q) ; + m.transfo_quad(q,rotateX(-18)) ; + + } + int index = count * 16 ; + inside_shape3(m,index,count -1) ; - test(m,q+4,n-1) ; } } -void shape1(MeshQuad& m ) +void shape1 (MeshQuad& m) { m.create_cube() ; - test(m,4,3) ; + #pragma omp parallel for + for(int i = 0 ; i < 6 ; i++) + inside_shape1(m,4*i,3) ; + +} + +void shape2(MeshQuad& m ) +{ + m.create_cube() ; + + for(int i = 0 ; i < 8; i++) + { + m.extrude_quad(12) ; + m.transfo_quad(12,rotateY(18)) ; + m.extrude_quad(16) ; + m.transfo_quad(16,rotateY(-18)) ; + } + + + inside_shape2(m,12,3) ; + inside_shape2(m,16,3) ; + } + +void shape3(MeshQuad& m ) +{ + m.create_cube() ; + inside_shape3(m,12,18) ; + m.extrude_quad(12) ; + + } + int main(int argc, char *argv[]) { Primitives prim; @@ -104,7 +184,7 @@ int main(int argc, char *argv[]) mesh.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix()); prim.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix()); - mesh.draw(CYAN); + mesh.draw(JAUNE); if (selected_quad>=0) { @@ -113,7 +193,6 @@ int main(int argc, char *argv[]) } }; - Mat4 transfo =translate(0,1,0) ; // to do when key pressed viewer.f_keyPress = [&] (int key, Qt::KeyboardModifiers mod) { @@ -162,9 +241,19 @@ int main(int argc, char *argv[]) break; case Qt::Key_1: - shape1(mesh) ; + shape1(mesh) ; + break ; + + case Qt::Key_2: + shape2(mesh) ; + break ; + + case Qt::Key_3: + shape3(mesh) ; break ; - // .... + + + // .... // Attention au cas m_selected_quad == -1 default: diff --git a/TP_Geom3D_2018/Projet_modeling/meshquad.cpp b/TP_Geom3D_2018/Projet_modeling/meshquad.cpp index f603e6987bad2fb8291460bdd4633a9ea207cab5..9140825c9bbad248acd7c8f5fb8def350e311d55 100644 --- a/TP_Geom3D_2018/Projet_modeling/meshquad.cpp +++ b/TP_Geom3D_2018/Projet_modeling/meshquad.cpp @@ -104,12 +104,12 @@ void MeshQuad::bounding_sphere(Vec3& C, float& R) } C /= nb_points; - float temp ,max = glm::length(m_points.at(0) - C); + float length ,max = glm::length(m_points.at(0) - C); for (i = 1; i < nb_points; i++) { - temp = glm::length(m_points.at(i) - C); - if (temp > max) { - max = temp; + length = glm::length(m_points.at(i) - C); + if (length > max) { + max = length; } } R = max; @@ -119,7 +119,7 @@ void MeshQuad::bounding_sphere(Vec3& C, float& R) void MeshQuad::create_cube() { clear(); - float s = 0.7 ; + float s = 0.5 ; // ajouter 8 sommets (-1 +1) int i1 = add_vertex(Vec3(-s,s,s)); @@ -252,39 +252,28 @@ int MeshQuad::intersected_closest(const Vec3& P, const Vec3& Dir) // on teste si il y a intersection avec le rayon // on garde le plus proche (de P) - int i, index = -1; - Vec3 intersector = Vec3(); - bool existe = false; - float min ,temp ; - int nb_quads = m_quad_indices.size(); + int i,inter = -1 ; + float temp , min = FLT_MAX ; + Vec3 inters = Vec3() ; - // Chercher l'indice de la premiere intersection + int nb_quads = m_quad_indices.size() ; #pragma omp parallel for - for (i = 0; i < nb_quads; i += 4) { - if (intersect_ray_quad(P, Dir, i, intersector)) { - min = glm::length(P - intersector); - index = i; - existe = true ; - } - } - // S'il y'a au moins une intersection - if(existe) + for (i = 0 ; i < nb_quads ; i+=4) { - #pragma omp parallel for - for (i = 0; i < nb_quads; i += 4){ - if (intersect_ray_quad(P, Dir, i, intersector)) + if(intersect_ray_quad(P,Dir,i,inters)) + { + temp = glm::length(P - inters) ; + if( temp < min) { - temp = glm::length(P - intersector); - if (temp < min) { - index = i; - min = temp; - } + inter = i ; + min = temp ; } } } - return index; + return inter; + } @@ -410,14 +399,14 @@ void MeshQuad::transfo_quad(int q, const glm::mat4& tr) // indice utilisation de glm::inverse() et de local_frame Mat4 local = local_frame(q); + // Si la l'inverse n'existe pas on retourne if (glm::determinant(local) == 0) { return; } Mat4 transfo = local * tr * glm::inverse(local); // Application au 4 points du quad - Vec4 A_prime, B_prime, C_prime, D_prime; - + A = Vec3(transfo * Vec4(A, 1)); B = Vec3(transfo * Vec4(B, 1)); C = Vec3(transfo * Vec4(C, 1)); @@ -428,26 +417,20 @@ void MeshQuad::transfo_quad(int q, const glm::mat4& tr) void MeshQuad::decale_quad(int q, float d) { - Mat4 transfo = translate(0, 0, d); - transfo_quad(q, transfo); - - gl_update(); + transfo_quad(q, translate(0, 0, d)); + gl_update(); } void MeshQuad::shrink_quad(int q, float s) { - Mat4 transfo = scale(s); - transfo_quad(q, transfo); - + transfo_quad(q, scale(s)); gl_update(); } void MeshQuad::tourne_quad(int q, float a) { - Mat4 transfo = rotateZ(a) ; - transfo_quad(q, transfo); - - gl_update(); + transfo_quad(q, rotateZ(a)); + gl_update(); } diff --git a/TP_Geom3D_2018/bin/proj_model.exe b/TP_Geom3D_2018/bin/proj_model.exe index 73e179ff3626880832142170af7c42c67da42d76..05b74f6119ecae93308693056ac0fd709ff01e42 100644 Binary files a/TP_Geom3D_2018/bin/proj_model.exe and b/TP_Geom3D_2018/bin/proj_model.exe differ diff --git a/TP_Geom3D_2018/bin/proj_model.ilk b/TP_Geom3D_2018/bin/proj_model.ilk index 3302f40956bbf72742a51da1f267ef076799fb51..b4294ef05ea27a6608d0813c22852bdbcc965f47 100644 Binary files a/TP_Geom3D_2018/bin/proj_model.ilk and b/TP_Geom3D_2018/bin/proj_model.ilk differ diff --git a/TP_Geom3D_2018/bin/proj_model.pdb b/TP_Geom3D_2018/bin/proj_model.pdb index 0b66bd9af84f080c5e6a2d4bc6252a83a81ea516..c3e8e6000f5027618b971b7d0d2923c216800bb4 100644 Binary files a/TP_Geom3D_2018/bin/proj_model.pdb and b/TP_Geom3D_2018/bin/proj_model.pdb differ diff --git a/TP_Geom3D_2018/geom3D.pro.user b/TP_Geom3D_2018/geom3D.pro.user index 4d935056bc8477ad8f2dbc0a2193984d3cd3f87c..981e9f7755f21f694180e5950441ba18b791cd48 100644 --- a/TP_Geom3D_2018/geom3D.pro.user +++ b/TP_Geom3D_2018/geom3D.pro.user @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> -<!-- Written by QtCreator 4.11.1, 2020-04-02T14:43:58. --> +<!-- Written by QtCreator 4.11.1, 2020-04-16T21:17:55. --> <qtcreator> <data> <variable>EnvironmentId</variable> diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj index 459e124526787fefe2bd50f490577dee86ab21df..f3525390abfe5c8b23006e9c9bcb06bf7e9528ce 100644 Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj differ diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj index 4dc4da8bc2be4784409eac6b63dd6a531f3c4621..4bd326fba1f7419c92d3c8c5c772c63599050993 100644 Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj differ diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj index c7cc3e4b9b9cbac13591f7f7b10c840d869e8cad..2c367e98f43267139679596d2264ef7e37ad44bf 100644 Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj differ diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb index 0abd5eb4309ecc69004f4c5c40e294e4fefd20dc..d8af9c4b004fbb23863a8036f2bf64eb1737c266 100644 Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb differ