//Run a mesher command int TriangleMesher::RunMesherCommand(MesherCommand* mc) { int ret = false; //Figure out which command to execute and run it if(mc->command_type == MesherCommand::GENERATE_RANDOM_GRID) ret = GenerateRandomGrid(mc->xmin, mc->xmax, mc->ymin, mc->ymax, mc->vertex_count); else if(mc->command_type == MesherCommand::GENERATE_UNIFORM_GRID) ret = GenerateUniformGrid(mc->xmin, mc->xmax, mc->ymin, mc->ymax, mc->xcount, mc->ycount); else if(mc->command_type == MesherCommand::GENERATE_HEX_GRID) ret = GenerateHexGrid(mc->xmin, mc->xmax, mc->ymin, mc->ymax, mc->xcount, mc->ycount); else if(mc->command_type == MesherCommand::RUN_TRIANGLE_MESHER) ret = RunTriangleMesher(mc->use_kd_tree); else if(mc->command_type == MesherCommand::LOAD_MESH_FROM_FILE) ret = LoadMeshFromFile(mc->filename, mc->load_save_triangles); else if(mc->command_type == MesherCommand::SAVE_MESH_TO_FILE) ret = SaveMeshToFile(mc->filename, mc->load_save_triangles); else if(mc->command_type == MesherCommand::WRITE_SVG) ret = WriteSVG(mc->svg_filename, mc->svg_width, mc->svg_height); else if(mc->command_type == MesherCommand::SUBDIVIDE_TRIANGLE) ret = SubdivideTriangle(mc->subdivide_vindex, mc->subdivide_triangle_local_index); else if(mc->command_type == MesherCommand::BARYCENTRIC_SUBDIVIDE) ret = BarycentricSubdivide(mc->subdivide_triangle_local_index); else if(mc->command_type == MesherCommand::BASIC_TRIANGLE_MESHER) ret = BasicTriangleMesher(); else if(mc->command_type == MesherCommand::STRETCHED_GRID) ret = StretchedGrid(mc->stretched_grid_iterations, mc->stretched_grid_alpha); else if(mc->command_type == MesherCommand::REFINE_MESH) ret = RefineMesh(mc->desired_edge_length); else if(mc->command_type == MesherCommand::DO_NOTHING) ret = true; //Update the mesher command result if(ret == false) { mc->mesher_command_result = MesherCommand::FAILURE_RESULT; return false; } else { mc->mesher_command_result = MesherCommand::SUCCESS_RESULT; return true; } return true; }
// Loads the mesh from an .obj File // // path The path route of the file void Mesh::LoadMesh(const std::string& path) { std::vector< glm::vec3 > _vertices; std::vector< glm::vec2 > _uvs; std::vector< glm::vec3 > _normals; std::vector< glm::vec3 > _tangents; std::vector< glm::vec3 > _bitangents; LoadMeshFromFile(path, _vertices, _uvs, _normals); ComputeTangents (_vertices, _uvs, _normals, _tangents, _bitangents); // Index every data (vertices, uvs, normals, tangents and bitangents) indexVBO_TBN (_vertices, _uvs, _normals, _tangents, _bitangents, indices, vertices, uvs, normals, tangents, bitangents); InitializeGLBuffers(); }