1 #!/usr/bin/env python
\r
6 import pymeshio.pmd.reader
\r
7 import opengl.material
\r
8 import opengl.texture
\r
9 import opengl.vertexarray
\r
15 model=pymeshio.pmd.reader.read_from_file(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 indexedVertexArray.addVertex(
\r
25 (v.pos[0], v.pos[1], -v.pos[2], 1),
\r
26 (v.normal[0], v.normal[1], -v.normal[2]),
\r
27 (v.uv[0], v.uv[1]),
\r
29 v.bone0, v.bone1, v.weight0)
\r
35 for i in model.indices:
\r
38 for i, m in enumerate(model.materials):
\r
39 material=opengl.material.MQOMaterial()
\r
42 m.diffuse_color[0],
\r
43 m.diffuse_color[1],
\r
44 m.diffuse_color[2],
\r
46 texturefile=m.texture_file.decode('cp932')
\r
47 texturepath=os.path.join(basedir, texturefile)
\r
48 if os.path.isfile(texturepath):
\r
49 if not texturepath in textureMap:
\r
50 texture=opengl.texture.Texture(texturepath)
\r
51 textureMap[texturepath]=texture
\r
52 material.texture=textureMap[texturepath]
\r
53 indices=indexedVertexArray.addMaterial(material)
\r
54 indices+=[next(indexGen) for n in range(m.vertex_count)]
\r
55 indexedVertexArray.optimize()
\r
56 return indexedVertexArray
\r