MCPcopy Create free account
hub / github.com/3DAnimals/3DAnimals / write_obj

Function write_obj

model/render/obj.py:128–177  ·  view source on GitHub ↗
(folder, fname, mesh, idx, save_material=True, feat=None, resolution=[256, 256])

Source from the content-addressed store, hash-verified

126######################################################################################
127
128def write_obj(folder, fname, mesh, idx, save_material=True, feat=None, resolution=[256, 256]):
129 obj_file = os.path.join(folder, fname + '.obj')
130 print("Writing mesh: ", obj_file)
131 with open(obj_file, "w") as f:
132 f.write(f"mtllib {fname}.mtl\n")
133 f.write("g default\n")
134
135 v_pos = mesh.v_pos[idx].detach().cpu().numpy() if mesh.v_pos is not None else None
136 v_nrm = mesh.v_nrm[idx].detach().cpu().numpy() if mesh.v_nrm is not None else None
137 v_tex = mesh.v_tex[idx].detach().cpu().numpy() if mesh.v_tex is not None else None
138
139 t_pos_idx = mesh.t_pos_idx[0].detach().cpu().numpy() if mesh.t_pos_idx is not None else None
140 t_nrm_idx = mesh.t_nrm_idx[0].detach().cpu().numpy() if mesh.t_nrm_idx is not None else None
141 t_tex_idx = mesh.t_tex_idx[0].detach().cpu().numpy() if mesh.t_tex_idx is not None else None
142
143 print(" writing %d vertices" % len(v_pos))
144 for v in v_pos:
145 f.write('v {} {} {} \n'.format(v[0], v[1], v[2]))
146
147 if v_tex is not None and save_material:
148 print(" writing %d texcoords" % len(v_tex))
149 assert(len(t_pos_idx) == len(t_tex_idx))
150 for v in tqdm(v_tex):
151 f.write('vt {} {} \n'.format(v[0], 1.0 - v[1]))
152
153 if v_nrm is not None:
154 print(" writing %d normals" % len(v_nrm))
155 assert(len(t_pos_idx) == len(t_nrm_idx))
156 for v in v_nrm:
157 f.write('vn {} {} {}\n'.format(v[0], v[1], v[2]))
158
159 # faces
160 f.write("s 1 \n")
161 f.write("g pMesh1\n")
162 f.write("usemtl defaultMat\n")
163
164 # Write faces
165 print(" writing %d faces" % len(t_pos_idx))
166 for i in range(len(t_pos_idx)):
167 f.write("f ")
168 for j in range(3):
169 f.write(' %s/%s/%s' % (str(t_pos_idx[i][j]+1), '' if v_tex is None else str(t_tex_idx[i][j]+1), '' if v_nrm is None else str(t_nrm_idx[i][j]+1)))
170 f.write("\n")
171
172 if save_material and mesh.material is not None:
173 mtl_file = os.path.join(folder, fname + '.mtl')
174 print("Writing material: ", mtl_file)
175 material.save_mtl(mtl_file, mesh.material, mesh=mesh.get_n(idx), feat=feat, resolution=resolution)
176
177 print("Done exporting mesh")

Callers 1

save_objFunction · 0.85

Calls 2

detachMethod · 0.80
get_nMethod · 0.80

Tested by

no test coverage detected