MCPcopy Create free account
hub / github.com/TencentARC/InstantMesh / loadobjtex

Function loadobjtex

src/utils/mesh_util.py:114–153  ·  view source on GitHub ↗
(meshfile)

Source from the content-addressed store, hash-verified

112
113
114def loadobjtex(meshfile):
115 v = []
116 vt = []
117 f = []
118 ft = []
119 meshfp = open(meshfile, 'r')
120 for line in meshfp.readlines():
121 data = line.strip().split(' ')
122 data = [da for da in data if len(da) > 0]
123 if not ((len(data) == 3) or (len(data) == 4) or (len(data) == 5)):
124 continue
125 if data[0] == 'v':
126 assert len(data) == 4
127
128 v.append([float(d) for d in data[1:]])
129 if data[0] == 'vt':
130 if len(data) == 3 or len(data) == 4:
131 vt.append([float(d) for d in data[1:3]])
132 if data[0] == 'f':
133 data = [da.split('/') for da in data]
134 if len(data) == 4:
135 f.append([int(d[0]) for d in data[1:]])
136 ft.append([int(d[1]) for d in data[1:]])
137 elif len(data) == 5:
138 idx1 = [1, 2, 3]
139 data1 = [data[i] for i in idx1]
140 f.append([int(d[0]) for d in data1])
141 ft.append([int(d[1]) for d in data1])
142 idx2 = [1, 3, 4]
143 data2 = [data[i] for i in idx2]
144 f.append([int(d[0]) for d in data2])
145 ft.append([int(d[1]) for d in data2])
146 meshfp.close()
147
148 # torch need int64
149 facenp_fx3 = np.array(f, dtype=np.int64) - 1
150 ftnp_fx3 = np.array(ft, dtype=np.int64) - 1
151 pointnp_px3 = np.array(v, dtype=np.float32)
152 uvs = np.array(vt, dtype=np.float32)
153 return pointnp_px3, facenp_fx3, uvs, ftnp_fx3
154
155
156# ==============================================================================================

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected