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