in jsuarez/extra/embyr_deprecated/embyr/kivy3/loaders/objloader.py [0:0]
def convert_to_mesh(self, vertex_format=None):
"""Converts data gotten from the .obj definition
file and create Kivy3 Mesh object which may be used
for drawing object in the scene
"""
geometry = Geometry()
material = Material()
mtl_dirname = os.path.abspath(os.path.dirname(self.loader.mtl_source))
v_idx = 0
# create geometry for mesh
for f in self.faces:
verts = f[0]
norms = f[1]
tcs = f[2]
face3 = Face3(0, 0, 0)
for i, e in enumerate(['a', 'b', 'c']):
#get normal components
n = (0.0, 0.0, 0.0)
if norms[i] != -1:
n = self.loader.normals[norms[i] - 1]
face3.vertex_normals.append(n)
#get vertex components
v = self.loader.vertices[verts[i] - 1]
geometry.vertices.append(v)
setattr(face3, e, v_idx)
v_idx += 1
#get texture coordinate components
t = (0.0, 0.0)
if tcs[i] != -1:
t = self.loader.texcoords[tcs[i] - 1]
tc = Vector2(t[0], 1. - t[1])
geometry.face_vertex_uvs[0].append(tc)
geometry.faces.append(face3)
# apply material for object
if self.mtl_name in self.loader.mtl_contents:
raw_material = self.loader.mtl_contents[self.mtl_name]
for k, v in raw_material.items():
_k = self._mtl_map.get(k, None)
if k in ["map_Kd", ]:
map_path = os.path.join(mtl_dirname, v[0])
tex = Image(map_path).texture
material.map = tex
continue
if _k:
if len(v) == 1:
v = float(v[0])
if k == 'Tr':
v = 1. - v
setattr(material, _k, v)
else:
v = list(map(lambda x: float(x), v))
setattr(material, _k, v)
mesh = Mesh(geometry, material)
return mesh