save_obj

 

int saveMeshAsObjWithTexture(Mesh& mgtext, const string& filename)
{

    size_t nVerts = mgtext.pointnum;
    size_t nfaces = mgtext.facenum;
    ofstream outfile;
    outfile.open(filename);
    if (!outfile) {
        std::cout << "file open failed.\n";
        return -1;
    }

    string mtlname = filename;
    mtlname.erase(mtlname.end() - 4, mtlname.end());

    ofstream mtl;
    mtl.open(mtlname + ".mtl");
    if (!mtl) {
        std::cout << "file mtl open failed.\n";
        return -1;
    }
    //mtl
    mtl << "#\n"
        << "# Wavefront material file\n"
        << "# Converted by Meshlab Group\n"
        << "#\n\n"

        << "newmtl material_0\n"
        << "Ka 0.200000 0.200000 0.200000\n"
        << "Kd 1.000000 1.000000 1.000000\n"
        << "Ks 1.000000 1.000000 1.000000\n"
        << "Tr 1.000000\n"
        << "illum 2\n"
        << "Ns 0.000000\n"
        << "map_Kd material0000.png\n\n";
    mtl.close();

    //obj header
    outfile << "####\n"
        << "#\n"
        << "# OBJ File Generated by Meshlab\n"
        << "#\n"
        << "####\n"
        << "# Object out.obj\n"
        << "#\n"
        << "# Vertices: " << nVerts << "\n"
        << "# Faces : " << nfaces << "\n"
        << "#\n"
        << "####\n"
        << "mtllib ./out.mtl\n\n\n";

    // Vertices
    for (size_t i = 0; i < nVerts; i++)
    {
        outfile << setiosflags(ios::fixed) << setprecision(6)
            << "vn " << mgtext.normals[i].x << " " << mgtext.normals[i].y << " " << mgtext.normals[i].z << "\n"
            << "vt " << mgtext.point_uv_vect[i].x << " " << mgtext.point_uv_vect[i].y << "\n"
            << "v " << mgtext.point_vect[i].x << " " << mgtext.point_vect[i].y << " " << mgtext.point_vect[i].z << "\n";
    }
    outfile << "\n\n";

    outfile << "usemtl material_0\n";
    for (size_t i = 0; i < nfaces; i++)
    {
       
        
        outfile << "f "
            << mgtext.face[3 * i] + 1 << "/" << mgtext.face[3 * i] + 1 << "/" << mgtext.face[3 * i] + 1 << " "
            << mgtext.face[3 * i + 1] + 1 << "/" << mgtext.face[3 * i + 1] + 1 << "/" << mgtext.face[3 * i + 1] + 1 << " "
            << mgtext.face[3 * i + 2] + 1 << "/" << mgtext.face[3 * i + 2] + 1 << "/" << mgtext.face[3 * i + 2] + 1 << "\n";
    
    }

    outfile << "# End of File\n";

    outfile.close();
    return 0;
}

 

posted @ 2021-08-06 19:05  玥茹苟  阅读(33)  评论(0编辑  收藏  举报