OSDN Git Service

implement optimize
[meshio/pymeshio.git] / examples / mqobuilder.py
1 #!/usr/bin/env python\r
2 # coding: utf-8\r
3 \r
4 import time\r
5 import os\r
6 import pymeshio.mqo\r
7 from opengl import material\r
8 from opengl import vertexarraymap\r
9 \r
10 \r
11 def build(path):\r
12     # load scenee\r
13     t=time.time()\r
14     io=pymeshio.mqo.IO()\r
15     if not io.read(path):\r
16         return\r
17     print(time.time()-t, "sec")\r
18     # build\r
19     basedir=os.path.dirname(path)\r
20     vertexArrayMap=vertexarraymap.VertexArrayMapWithUV(\r
21             [material.MQOMaterial.create(m, basedir) \r
22                 for m in io.materials])\r
23     for o in io.objects:\r
24         # skip mikoto objects\r
25         if o.name.startswith("anchor"):\r
26             continue\r
27         if o.name.startswith("bone:"):\r
28             continue\r
29         if o.name.startswith("MCS:"):\r
30             continue\r
31 \r
32         for f in o.faces:\r
33             if f.index_count==3:\r
34                 vertexArrayMap.addTriangle(\r
35                         f.material_index,\r
36                         o.vertices[f.indices[0]],\r
37                         o.vertices[f.indices[1]],\r
38                         o.vertices[f.indices[2]],\r
39                         f.uv[0], f.uv[1], f.uv[2]\r
40                         )\r
41             elif f.index_count==4:\r
42                 # triangle 1\r
43                 vertexArrayMap.addTriangle(\r
44                         f.material_index,\r
45                         o.vertices[f.indices[0]],\r
46                         o.vertices[f.indices[1]],\r
47                         o.vertices[f.indices[2]],\r
48                         f.uv[0], f.uv[1], f.uv[2]\r
49                         )\r
50                 # triangle 2\r
51                 vertexArrayMap.addTriangle(\r
52                         f.material_index,\r
53                         o.vertices[f.indices[2]],\r
54                         o.vertices[f.indices[3]],\r
55                         o.vertices[f.indices[0]],\r
56                         f.uv[2], f.uv[3], f.uv[0]\r
57                         )\r
58 \r
59     vertexArrayMap.optimize()\r
60     return vertexArrayMap\r
61 \r