• R/O
  • SSH
  • HTTPS

mmdx: Commit


Commit MetaInfo

Revision844 (tree)
Zeit2011-06-11 15:34:32
Autorwilfrem

Log Message

表情頂点計算方法を調整

Ändern Zusammenfassung

Diff

--- branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPartGPU.cs (revision 843)
+++ branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPartGPU.cs (revision 844)
@@ -28,7 +28,7 @@
2828 /// <param name="vertices">頂点配列</param>
2929 /// <param name="vertMap">モデルの頂点とMMDの頂点対応</param>
3030 /// <param name="indexBuffer">インデックスバッファ</param>
31- public MMDGPUModelPartPNm(int triangleCount, MMDVertexNm[] vertices, int[] vertMap, IndexBuffer indexBuffer)
31+ public MMDGPUModelPartPNm(int triangleCount, MMDVertexNm[] vertices, Dictionary<long, int[]> vertMap, IndexBuffer indexBuffer)
3232 : base(triangleCount, vertices.Length, vertMap, indexBuffer)
3333 {
3434 this.vertices = vertices;
@@ -93,7 +93,7 @@
9393 /// <param name="vertices">頂点配列</param>
9494 /// <param name="vertMap">モデルの頂点とMMDの頂点対応</param>
9595 /// <param name="indexBuffer">インデックスバッファ</param>
96- public MMDGPUModelPartPNmVc(int triangleCount, MMDVertexNmVc[] vertices, int[] vertMap, IndexBuffer indexBuffer)
96+ public MMDGPUModelPartPNmVc(int triangleCount, MMDVertexNmVc[] vertices, Dictionary<long, int[]> vertMap, IndexBuffer indexBuffer)
9797 : base(triangleCount, vertices.Length, vertMap, indexBuffer)
9898 {
9999 this.vertices = vertices;
@@ -159,7 +159,7 @@
159159 /// <param name="vertices">頂点配列</param>
160160 /// <param name="vertMap">モデルの頂点とMMDの頂点対応</param>
161161 /// <param name="indexBuffer">インデックスバッファ</param>
162- public MMDGPUModelPartPNmTx(int triangleCount, MMDVertexNmTx[] vertices, int[] vertMap, IndexBuffer indexBuffer)
162+ public MMDGPUModelPartPNmTx(int triangleCount, MMDVertexNmTx[] vertices, Dictionary<long, int[]> vertMap, IndexBuffer indexBuffer)
163163 : base(triangleCount, vertices.Length, vertMap, indexBuffer)
164164 {
165165 this.vertices = vertices;
@@ -225,7 +225,7 @@
225225 /// <param name="vertices">頂点配列</param>
226226 /// <param name="vertMap">モデルの頂点とMMDの頂点対応</param>
227227 /// <param name="indexBuffer">インデックスバッファ</param>
228- public MMDGPUModelPartPNmTxVc(int triangleCount, MMDVertexNmTxVc[] vertices, int[] vertMap, IndexBuffer indexBuffer)
228+ public MMDGPUModelPartPNmTxVc(int triangleCount, MMDVertexNmTxVc[] vertices, Dictionary<long, int[]> vertMap, IndexBuffer indexBuffer)
229229 : base(triangleCount, vertices.Length, vertMap, indexBuffer)
230230 {
231231 this.vertices = vertices;
--- branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPart.cs (revision 843)
+++ branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPart.cs (revision 844)
@@ -38,7 +38,7 @@
3838 /// <summary>
3939 /// 元の頂点番号との対応表
4040 /// </summary>
41- protected int[] VertMap;
41+ protected Dictionary<long, int[]> VertMap;
4242 /// <summary>
4343 /// エフェクト
4444 /// </summary>
@@ -80,7 +80,7 @@
8080 /// <param name="vertexCount">頂点数</param>
8181 /// <param name="vertMap">モデルの頂点とMMD頂点の対応</param>
8282 /// <param name="indexBuffer">インデックスバッファ</param>
83- public MMDModelPart(int triangleCount, int vertexCount, int[] vertMap, IndexBuffer indexBuffer)
83+ public MMDModelPart(int triangleCount, int vertexCount, Dictionary<long, int[]> vertMap, IndexBuffer indexBuffer)
8484 {
8585 this.triangleCount = triangleCount;
8686 this.vertexCount = vertexCount;
--- branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPartReader.cs (revision 843)
+++ branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPartReader.cs (revision 844)
@@ -24,7 +24,7 @@
2424 //モデルパーツの読み込み
2525 int triangleCount = input.ReadInt32();
2626 MMDVertexNm[] Vertices = input.ReadObject<MMDVertexNm[]>();
27- int[] VertMap = input.ReadObject<int[]>();
27+ Dictionary<long, int[]> VertMap = input.ReadObject<Dictionary<long, int[]>>();
2828 IndexBuffer indexBuffer = input.ReadObject<IndexBuffer>();
2929
3030 // create the model part from this data
--- branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPartGPUFactory.cs (revision 843)
+++ branches/XNA4/MikuMikuDanceXNA/Model/MMDModelPartGPUFactory.cs (revision 844)
@@ -16,7 +16,7 @@
1616 IndexBuffer indexBuffer = null;
1717 if (OpaqueData.ContainsKey("IndexBuffer"))
1818 indexBuffer = OpaqueData["IndexBuffer"] as IndexBuffer;
19- int[] VertMap = OpaqueData["VertMap"] as int[];
19+ Dictionary<long, int[]> VertMap = OpaqueData["VertMap"] as Dictionary<long, int[]>;
2020 if (indexBuffer == null)
2121 throw new ArgumentException("MMDModelPartFactoryのOpaqueDataには\"IndexBuffer\"キーとIndexBufferオブジェクトが必要です。", "OpaqueData");
2222 if (Vertices is MMDVertexNmTx[])
--- branches/XNA4/MikuMikuDanceCore/Model/MMDFaceManager.cs (revision 843)
+++ branches/XNA4/MikuMikuDanceCore/Model/MMDFaceManager.cs (revision 844)
@@ -100,7 +100,7 @@
100100 /// </summary>
101101 /// <param name="vert">頂点</param>
102102 /// <param name="indices">PMDとMMDとの頂点変換マップ</param>
103- public void ApplyToVertex(MMDVertexNm[] vert, int[] indices
103+ public void ApplyToVertex(MMDVertexNm[] vert, Dictionary<long,int[]> indices
104104 #if !XBOX
105105 = null
106106 #endif
@@ -131,21 +131,23 @@
131131 else
132132 {
133133 #if !XBOX
134- Parallel.For(0,vert.LongLength, (i) =>
134+ Parallel.ForEach(vertData,(it)=>
135135 #else
136- for (int i = 0; i < vert.Length; ++i )
136+ foreach(var it in vertData)
137137 #endif
138138 {
139- long index = indices[i];
140- if (vertData.ContainsKey(index))
139+ if (indices.ContainsKey(it.Key))
141140 {
142- //baseで初期化
143- vert[i].Position = vertData[index][0].vector;
144- for (int j = 1; j < vertData[index].Length; ++j)
141+ foreach (var i in indices[it.Key])
145142 {
146- Vector3 temp;
147- Vector3.Multiply(ref vertData[index][j].vector, FaceRates[vertData[index][j].FaceName], out temp);
148- vert[i].Position += temp;
143+ //baseで初期化
144+ vert[i].Position = it.Value[0].vector;
145+ for (int j = 1; j < it.Value.Length; ++j)
146+ {
147+ Vector3 temp;
148+ Vector3.Multiply(ref it.Value[j].vector, FaceRates[it.Value[j].FaceName], out temp);
149+ vert[i].Position += temp;
150+ }
149151 }
150152 }
151153 }
--- branches/XNA4/MMDPipeline/Model/MMDModelPartContent.cs (revision 843)
+++ branches/XNA4/MMDPipeline/Model/MMDModelPartContent.cs (revision 844)
@@ -31,6 +31,6 @@
3131 /// <summary>
3232 /// 元の頂点番号対応
3333 /// </summary>
34- public int[] VertMap;
34+ public Dictionary<long, int[]> VertMap;
3535 }
3636 }
--- branches/XNA4/MMDPipeline/Model/MMDModelContent.cs (revision 843)
+++ branches/XNA4/MMDPipeline/Model/MMDModelContent.cs (revision 844)
@@ -54,7 +54,7 @@
5454 /// <param name="vertMap">元の頂点番号との対応表</param>
5555 /// <param name="vertices">頂点データ</param>
5656 /// <param name="material">マテリアルデータ</param>
57- public void AddModelPart(int triangleCount, IndexCollection indexCollection, int[] vertMap, MMDVertexNmContent[] vertices, MaterialContent material)
57+ public void AddModelPart(int triangleCount, IndexCollection indexCollection, Dictionary<long, int[]> vertMap, MMDVertexNmContent[] vertices, MaterialContent material)
5858 {
5959 if (material == null)
6060 throw new ArgumentNullException("material");
--- branches/XNA4/MMDPipeline/Model/MMDModelProcessor.cs (revision 843)
+++ branches/XNA4/MMDPipeline/Model/MMDModelProcessor.cs (revision 844)
@@ -233,8 +233,21 @@
233233 //マテリアルの変換
234234 MaterialContent material = ProcessMaterial(geometry.Material, ShaderIndex);
235235
236+ //頂点マップの作成
237+ Dictionary<long, int[]> vertMap = new Dictionary<long, int[]>();
238+ Dictionary<long, List<int>> vertMapTemp = new Dictionary<long, List<int>>();
239+ for (int i = 0; i < geometry.Vertices.PositionIndices.Count; ++i)
240+ {
241+ if (!vertMapTemp.ContainsKey(geometry.Vertices.PositionIndices[i]))
242+ {
243+ vertMapTemp.Add(geometry.Vertices.PositionIndices[i], new List<int>());
244+ }
245+ vertMapTemp[geometry.Vertices.PositionIndices[i]].Add(i);
246+ }
247+ foreach (var it in vertMapTemp)
248+ vertMap.Add(it.Key, it.Value.ToArray());
236249 //処理済みのジオメトリを返却用モデルに追加
237- resultModel.AddModelPart(triangleCount, geometry.Indices, geometry.Vertices.PositionIndices.ToArray(), vertices, material);
250+ resultModel.AddModelPart(triangleCount, geometry.Indices, vertMap, vertices, material);
238251
239252 }
240253 //BoneWeightCollectionの変換
Show on old repository browser