|
@@ -536,15 +536,27 @@ def parse_obj(fname):
|
|
|
uv_index = []
|
|
|
normal_index = []
|
|
|
|
|
|
+
|
|
|
+ # Precompute vert / normal / uv lists
|
|
|
+ # for negative index lookup
|
|
|
+ vertlen = len(vertices) + 1
|
|
|
+ normlen = len(normals) + 1
|
|
|
+ uvlen = len(uvs) + 1
|
|
|
+
|
|
|
for v in chunks[1:]:
|
|
|
vertex = parse_vertex(v)
|
|
|
if vertex['v']:
|
|
|
+ if vertex['v'] < 0:
|
|
|
+ vertex['v'] += vertlen
|
|
|
vertex_index.append(vertex['v'])
|
|
|
if vertex['t']:
|
|
|
+ if vertex['t'] < 0:
|
|
|
+ vertex['t'] += uvlen
|
|
|
uv_index.append(vertex['t'])
|
|
|
if vertex['n']:
|
|
|
+ if vertex['n'] < 0:
|
|
|
+ vertex['n'] += normlen
|
|
|
normal_index.append(vertex['n'])
|
|
|
-
|
|
|
faces.append({
|
|
|
'vertex':vertex_index,
|
|
|
'uv':uv_index,
|