if(i.name.ToLower() == "bone")\r
continue;\r
\r
+ Console.WriteLine("object:" + i.name);\r
+\r
// 一番近い頂点への参照\r
List<int> vref= new List<int>(i.vertices.Count);\r
\r
faces1.Add(j);\r
\r
#region ボーンパーティション\r
- while(faces1.Count > 0)\r
+ Console.WriteLine(" vertices bone_indices");\r
+ Console.WriteLine(" -------- ------------");\r
+\r
+ while (faces1.Count > 0)\r
{\r
int mtl = i.faces[faces1[0]].mtl;\r
selected.Clear();\r
v[0] = vlst[vref[f.a]];\r
v[1] = vlst[vref[f.b]];\r
v[2] = vlst[vref[f.c]];\r
- bool valid = true;\r
+\r
work.Clear();\r
\r
for(int k= 0; k < 3; ++k)\r
byte* idx = (byte*)(&idx0);\r
float* wgt = (float*)(&wgt0);\r
\r
-// if(idx0 != 0)\r
-// idx0 = idx0;\r
-\r
for(int l= 0; l < 4; ++l)\r
{\r
if(wgt[l] <= float.Epsilon) continue;\r
if(selected.ContainsKey(idx[l])) continue;\r
\r
- if(selected.Count == 16)\r
- {\r
- valid = false;\r
- break;\r
- }\r
-\r
if(!work.ContainsKey(idx[l]))\r
work.Add(idx[l], 0);\r
-\r
- if(selected.Count + work.Count >= 17)\r
- {\r
- valid = false;\r
- break;\r
- }\r
}\r
-\r
- if(!valid)\r
- break;\r
}\r
\r
- if(!valid)\r
+ if (selected.Count + work.Count > 16)\r
{\r
faces2.Add(j);\r
continue;\r
// ボーンリストに足してvalid\r
foreach(KeyValuePair<int, int> l in work)\r
{\r
- System.Diagnostics.Debug.WriteLine(\r
- string.Format("Add: {0} -> {1}", l.Key, selected.Count)); \r
selected.Add(l.Key, selected.Count); // ボーンテーブルに追加\r
bones.Add(l.Key);\r
}\r
for(int j= 0; j < nidx.Length; ++j)\r
sub.vertices[j] = verts[nidx[j]];\r
\r
+ Console.WriteLine(" {0,8} {1,12}", sub.vertices.Length, sub.bones.Length);\r
+\r
subs.Add(sub);\r
\r
// 次の周回\r
if(i.name.ToLower() == "bone")\r
continue;\r
\r
+ Console.WriteLine("object:" + i.name);\r
+\r
// 法線生成\r
Point3[] nrm = new Point3[i.vertices.Count];\r
\r