//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;
}
示例#2
0
    // 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();
    }