MCPcopy Create free account
hub / github.com/Pixel-Talk/EHM-Tracker / write_obj

Function write_obj

src/modules/pixie/utils/util.py:453–541  ·  view source on GitHub ↗

Save 3D face model with texture. borrowed from https://github.com/YadiraF/PRNet/blob/master/utils/write.py Args: obj_name: str vertices: shape = (nver, 3) colors: shape = (nver, 3) faces: shape = (ntri, 3) texture: shape = (uv_size, uv_size, 3)

(obj_name,
              vertices,
              faces,
              colors=None,
              texture=None,
              uvcoords=None,
              uvfaces=None,
              inverse_face_order=False,
              normal_map=None,
              )

Source from the content-addressed store, hash-verified

451 dict[k] = v.to(device)
452
453def write_obj(obj_name,
454 vertices,
455 faces,
456 colors=None,
457 texture=None,
458 uvcoords=None,
459 uvfaces=None,
460 inverse_face_order=False,
461 normal_map=None,
462 ):
463 ''' Save 3D face model with texture.
464 borrowed from https://github.com/YadiraF/PRNet/blob/master/utils/write.py
465 Args:
466 obj_name: str
467 vertices: shape = (nver, 3)
468 colors: shape = (nver, 3)
469 faces: shape = (ntri, 3)
470 texture: shape = (uv_size, uv_size, 3)
471 uvcoords: shape = (nver, 2) max value<=1
472 ''&#x27;
473 if obj_name.split('.')[-1] != 'obj':
474 obj_name = obj_name + '.obj'
475 mtl_name = obj_name.replace('.obj', '.mtl')
476 texture_name = obj_name.replace('.obj', '.png')
477 material_name = 'FaceTexture'
478
479 faces = faces.copy()
480 # mesh lab start with 1, python/c++ start from 0
481 faces += 1
482 if inverse_face_order:
483 faces = faces[:, [2, 1, 0]]
484 if uvfaces is not None:
485 uvfaces = uvfaces[:, [2, 1, 0]]
486
487 # write obj
488 with open(obj_name, 'w') as f:
489 if texture is not None:
490 f.write('mtllib %s\n\n' % os.path.basename(mtl_name))
491
492 # write vertices
493 if colors is None:
494 for i in range(vertices.shape[0]):
495 f.write('v {} {} {}\n'.format(vertices[i, 0], vertices[i, 1], vertices[i, 2]))
496 else:
497 for i in range(vertices.shape[0]):
498 f.write('v {} {} {} {} {} {}\n'.format(vertices[i, 0], vertices[i, 1], vertices[i, 2], colors[i, 0], colors[i, 1], colors[i, 2]))
499
500 # write uv coords
501 if texture is None:
502 for i in range(faces.shape[0]):
503 f.write('f {} {} {}\n'.format(faces[i, 0], faces[i, 1], faces[i, 2]))
504 else:
505 for i in range(uvcoords.shape[0]):
506 f.write('vt {} {}\n'.format(uvcoords[i,0], uvcoords[i,1]))
507 f.write('usemtl %s\n' % material_name)
508 # write f: ver ind/ uv ind
509 uvfaces = uvfaces + 1
510 for i in range(faces.shape[0]):

Callers

nothing calls this directly

Calls 1

writeMethod · 0.80

Tested by

no test coverage detected