|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cv2 |
|
import numpy as np |
|
|
|
|
|
def LoadObj(fn): |
|
lines = [l.strip() for l in open(fn)] |
|
vertices = [] |
|
faces = [] |
|
for l in lines: |
|
words = [w for w in l.split(" ") if w != ""] |
|
if len(words) == 0: |
|
continue |
|
if words[0] == "v": |
|
v = [float(words[i]) for i in range(1, 4)] |
|
vertices.append(v) |
|
elif words[0] == "f": |
|
f = [int(words[i]) - 1 for i in range(1, 4)] |
|
faces.append(f) |
|
|
|
return np.array(vertices).astype("float32"), np.array(faces).astype("int32") |
|
|
|
|
|
def LoadObjWithTexture(fn, tex_fn): |
|
lines = [l.strip() for l in open(fn)] |
|
vertices = [] |
|
vertex_textures = [] |
|
faces = [] |
|
face_textures = [] |
|
for l in lines: |
|
words = [w for w in l.split(" ") if w != ""] |
|
if len(words) == 0: |
|
continue |
|
if words[0] == "v": |
|
v = [float(words[i]) for i in range(1, len(words))] |
|
vertices.append(v) |
|
elif words[0] == "vt": |
|
v = [float(words[i]) for i in range(1, len(words))] |
|
vertex_textures.append(v) |
|
elif words[0] == "f": |
|
f = [] |
|
ft = [] |
|
for i in range(1, len(words)): |
|
t = words[i].split("/") |
|
f.append(int(t[0]) - 1) |
|
ft.append(int(t[1]) - 1) |
|
for i in range(2, len(f)): |
|
faces.append([f[0], f[i - 1], f[i]]) |
|
face_textures.append([ft[0], ft[i - 1], ft[i]]) |
|
|
|
tex_image = cv2.cvtColor(cv2.imread(tex_fn), cv2.COLOR_BGR2RGB) |
|
return ( |
|
np.array(vertices).astype("float32"), |
|
np.array(vertex_textures).astype("float32"), |
|
np.array(faces).astype("int32"), |
|
np.array(face_textures).astype("int32"), |
|
tex_image, |
|
) |
|
|