/// <summary>
 /// 指定の Block の要素サイズについての CubeSurfaceVertexSource を生成して登録します。
 /// </summary>
 /// <param name="elementSize"></param>
 static void RegisterCubeSurfaceVertexSource(float elementSize)
 {
     cubeSurfaceVertexSourceMap[elementSize] = new CubeSurfaceVertexSource(elementSize);
 }
        /// <summary>
        /// InterBlockMeshPart のための VertexSource を作成します。
        /// </summary>
        /// <param name="meshPartVS">InterBlockMeshPart のための VertexSource。</param>
        /// <param name="part">Part。</param>
        /// <param name="cubeSurfaceVS">立方体の面の頂点データを提供する VertexSource。</param>
        /// <param name="elementSize">Element のサイズ。</param>
        static void MakeMeshPartVertexSource(
            MeshPartVertexSource meshPartVS, Part part, CubeSurfaceVertexSource cubeSurfaceVS, float elementSize)
        {
            // Block は最小位置を原点とするモデルであり、一方、立方体の VertexSource は立方体の中心が原点にあるため、
            // 立方体の最小位置を原点とするための移動行列を作成し、立方体の頂点データの変換に利用します。
            Matrix elementOriginTranslation = Matrix.CreateTranslation(new Vector3(elementSize * 0.5f));

            for (int i = 0; i < part.ResolvedElements.Count; i++)
            {
                var resolvedElement = part.ResolvedElements[i];

                // グリッド内位置へ移動させるための移動行列を作成します。
                var gridPosition = resolvedElement.Element.Position.ToVector3() * elementSize;
                Matrix gridTranslation = Matrix.CreateTranslation(gridPosition);

                // 立方体の最終的な移動行列を作成します。
                Matrix finalTranslation;
                Matrix.Multiply(ref elementOriginTranslation, ref gridTranslation, out finalTranslation);

                // 表示すべき面の頂点データを VertexSource へ設定します。
                for (int surfaceIndex = 0; surfaceIndex < 6; surfaceIndex++)
                {
                    if (resolvedElement.SurfaceVisible[surfaceIndex])
                        AddSurfaceVertices(
                            meshPartVS,
                            cubeSurfaceVS.Surfaces[surfaceIndex],
                            ref finalTranslation);
                }
            }
        }