1 #!/usr/bin/env python
\r
6 import pymeshio.pmx.loader
\r
7 import opengl.material
\r
8 import opengl.texture
\r
9 import opengl.vertexarray
\r
15 model=pymeshio.pmx.loader.load(path)
\r
18 print(time.time()-t, "sec")
\r
20 basedir=os.path.dirname(path)
\r
21 indexedVertexArray=opengl.vertexarray.IndexedVertexArray()
\r
22 for v in model.vertices:
\r
23 # left-handed y-up to right-handed y-up
\r
24 if v.deform.__class__ is pymeshio.pmx.Bdef1:
\r
25 indexedVertexArray.addVertex(
\r
26 (v.position[0], v.position[1], -v.position[2], 1),
\r
27 (v.normal[0], v.normal[1], -v.normal[2]),
\r
28 (v.uv[0], v.uv[1]),
\r
30 v.deform.index0, 0, 1.0)
\r
31 elif v.deform.__class__ is pymeshio.pmx.Bdef2:
\r
32 indexedVertexArray.addVertex(
\r
33 (v.position[0], v.position[1], -v.position[2], 1),
\r
34 (v.normal[0], v.normal[1], -v.normal[2]),
\r
35 (v.uv[0], v.uv[1]),
\r
37 v.deform.index0, v.deform.index1, v.deform.weight0)
\r
39 print("unknown deform: {0}".format(v.deform))
\r
45 for i in model.indices:
\r
48 for i, m in enumerate(model.materials):
\r
49 material=opengl.material.MQOMaterial()
\r
52 m.diffuse_color[0],
\r
53 m.diffuse_color[1],
\r
54 m.diffuse_color[2],
\r
56 if m.texture_index!=255:
\r
57 texturepath=os.path.join(basedir, model.textures[m.texture_index])
\r
58 if os.path.isfile(texturepath):
\r
59 if not texturepath in textureMap:
\r
60 texture=opengl.texture.Texture(texturepath)
\r
61 textureMap[texturepath]=texture
\r
62 material.texture=textureMap[texturepath]
\r
63 indices=indexedVertexArray.addMaterial(material)
\r
64 indices+=[next(indexGen) for n in range(m.vertex_count)]
\r
65 indexedVertexArray.optimize()
\r
66 return indexedVertexArray
\r