Beispiel #1
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="triangleCount">三角形の個数</param>
 /// <param name="vertices">頂点配列</param>
 /// <param name="indexBuffer">インデックスバッファ</param>
 public MMDCPUModelPartP(int triangleCount, MMDVertex[] vertices,int[] vertMap, IndexBuffer indexBuffer)
     : base(triangleCount, vertices.Length, vertMap, indexBuffer)
 {
     this.vertices = vertices;
     //GPUリソース作成
     gpuVertices = new VertexPosition[vertices.Length];
     vertexBuffer = new DynamicVertexBuffer(indexBuffer.GraphicsDevice, typeof(VertexPosition), vertices.Length, BufferUsage.WriteOnly);
     //初期値代入
     for (int i = 0; i < vertices.Length; i++)
     {
         gpuVertices[i].Position = vertices[i].Position;
     }
     // put the vertices into our vertex buffer
     vertexBuffer.SetData(gpuVertices, 0, vertexCount, SetDataOptions.Discard);
 }
Beispiel #2
0
 //ファクトリー関数
 public IMMDModelPart Create(int triangleCount, MMDVertex[] Vertices, Dictionary<string, object> OpaqueData)
 {
     IndexBuffer indexBuffer = null;
     if (OpaqueData.ContainsKey("IndexBuffer"))
         indexBuffer = OpaqueData["IndexBuffer"] as IndexBuffer;
     int[] VertMap = OpaqueData["VertMap"] as int[];
     if (indexBuffer == null)
         throw new ArgumentException("MMDModelPartFactoryのOpaqueDataには\"IndexBuffer\"キーとIndexBufferオブジェクトが必要です。", "OpaqueData");
     if (Vertices is MMDVertexNm[])
     {
         if (Vertices is MMDVertexNmTx[])
         {
             if (Vertices is MMDVertexNmTxVc[])
                 return new MMDCPUModelPartPNmTxVc(triangleCount, (MMDVertexNmTxVc[])Vertices, VertMap, indexBuffer);
             else
                 return new MMDCPUModelPartPNmTx(triangleCount, (MMDVertexNmTx[])Vertices, VertMap, indexBuffer);
         }
         else
         {
             if (Vertices is MMDVertexNmVc[])
                 return new MMDCPUModelPartPNmVc(triangleCount, (MMDVertexNmVc[])Vertices, VertMap, indexBuffer);
             else
                 return new MMDCPUModelPartPNm(triangleCount, (MMDVertexNm[])Vertices, VertMap, indexBuffer);
         }
     }
     else
     {
         if (Vertices is MMDVertexTx[])
         {
             if (Vertices is MMDVertexTxVc[])
                 return new MMDCPUModelPartPTxVc(triangleCount, (MMDVertexTxVc[])Vertices, VertMap, indexBuffer);
             else
                 return new MMDCPUModelPartPTx(triangleCount, (MMDVertexTx[])Vertices, VertMap, indexBuffer);
         }
         else
         {
             if (Vertices is MMDVertexVc[])
                 return new MMDCPUModelPartPVc(triangleCount, (MMDVertexVc[])Vertices, VertMap, indexBuffer);
             else
                 return new MMDCPUModelPartP(triangleCount, Vertices, VertMap, indexBuffer);
         }
     }
 }