Beispiel #1
0
        public void SetMesh(int segmentX, int segmentY, int segmentZ, bool translucence, ChunkMesh mesh)
        {
            ChunkMesh oldMesh;

            if (translucence)
            {
                oldMesh = translucentMeshes[segmentX, segmentY, segmentZ];
                translucentMeshes[segmentX, segmentY, segmentZ] = mesh;
            }
            else
            {
                oldMesh = opaqueMeshes[segmentX, segmentY, segmentZ];
                opaqueMeshes[segmentX, segmentY, segmentZ] = mesh;
            }

            if (oldMesh != null)
            {
                DetachMesh(oldMesh);
            }

            if (mesh != null)
            {
                AttachMesh(mesh);
            }
        }
Beispiel #2
0
        void DetachMesh(ChunkMesh mesh)
        {
            // ノードから削除。
            Node.Objects.Remove(mesh);

            // マネージャへ削除要求。
            chunkManager.DisposeMesh(mesh);
        }
        internal void DisposeMesh(ChunkMesh chunkMesh)
        {
            TotalVertexCount -= chunkMesh.VertexCount;
            TotalIndexCount  -= chunkMesh.IndexCount;

            chunkMesh.Dispose();

            MeshCount--;
        }
        /// <summary>
        /// チャンク メッシュを生成します。
        /// </summary>
        /// <param name="effect">チャンクのエフェクト。</param>
        /// <param name="translucent">
        /// true (半透明の場合)、false (それ以外の場合)。
        /// </param>
        /// <returns>チャンク メッシュ。</returns>
        ChunkMesh CreateMesh(ChunkEffect effect, bool translucent, int segmentX, int segmentY, int segmentZ)
        {
            meshNameBuilder.Length = 0;
            meshNameBuilder.Append((translucent) ? "TranslucentMesh" : "OpaqueMesh");
            meshNameBuilder.Append('_').AppendNumber(segmentX);
            meshNameBuilder.Append('_').AppendNumber(segmentY);
            meshNameBuilder.Append('_').AppendNumber(segmentZ);

            var name = meshNameBuilder.ToString();

            var mesh = new ChunkMesh(name, effect);

            mesh.Translucent = translucent;

            MeshCount++;

            return(mesh);
        }
        /// <summary>
        /// チャンク メッシュへ頂点およびインデックス情報を設定します。
        /// </summary>
        /// <param name="mesh">チャンク メッシュ。</param>
        public void Populate(ChunkMesh mesh)
        {
            if (mesh == null)
            {
                throw new ArgumentNullException("mesh");
            }

            // メッシュの BoundingBox。
            var transform = mesh.World;

            Vector3.Transform(ref box.Min, ref transform, out mesh.BoxWorld.Min);
            Vector3.Transform(ref box.Max, ref transform, out mesh.BoxWorld.Max);

            // メッシュの BoundingSphere。
            mesh.BoxWorld.GetCorners(corners);
            mesh.SphereWorld = BoundingSphere.CreateFromPoints(corners);

            mesh.SetVertices(vertices, VertexCount);
            mesh.SetIndices(indices, IndexCount);
        }
Beispiel #6
0
 /// <summary>
 /// チャンク メッシュを破棄します。
 /// </summary>
 /// <param name="chunkMesh">チャンク メッシュ。</param>
 internal void DisposeMesh(ChunkMesh chunkMesh)
 {
     meshManager.DisposeMesh(chunkMesh);
 }
        /// <summary>
        /// チャンク メッシュへ頂点およびインデックス情報を設定します。
        /// </summary>
        /// <param name="mesh">チャンク メッシュ。</param>
        public void Populate(ChunkMesh mesh)
        {
            if (mesh == null) throw new ArgumentNullException("mesh");

            // メッシュの BoundingBox。
            var transform = mesh.World;
            Vector3.Transform(ref box.Min, ref transform, out mesh.BoxWorld.Min);
            Vector3.Transform(ref box.Max, ref transform, out mesh.BoxWorld.Max);

            // メッシュの BoundingSphere。
            mesh.BoxWorld.GetCorners(corners);
            mesh.SphereWorld = BoundingSphere.CreateFromPoints(corners);

            mesh.SetVertices(vertices, VertexCount);
            mesh.SetIndices(indices, IndexCount);
        }
Beispiel #8
0
 /// <summary>
 /// チャンク メッシュを破棄します。
 /// </summary>
 /// <param name="chunkMesh">チャンク メッシュ。</param>
 internal void DisposeMesh(ChunkMesh chunkMesh)
 {
     meshManager.DisposeMesh(chunkMesh);
 }
Beispiel #9
0
 void AttachMesh(ChunkMesh mesh)
 {
     // ノードへ追加。
     Node.Objects.Add(mesh);
 }
Beispiel #10
0
        void DetachMesh(ChunkMesh mesh)
        {
            // ノードから削除。
            Node.Objects.Remove(mesh);

            // マネージャへ削除要求。
            chunkManager.DisposeMesh(mesh);
        }
Beispiel #11
0
 void AttachMesh(ChunkMesh mesh)
 {
     // ノードへ追加。
     Node.Objects.Add(mesh);
 }
Beispiel #12
0
        public void SetMesh(int segmentX, int segmentY, int segmentZ, bool translucence, ChunkMesh mesh)
        {
            ChunkMesh oldMesh;
            if (translucence)
            {
                oldMesh = translucentMeshes[segmentX, segmentY, segmentZ];
                translucentMeshes[segmentX, segmentY, segmentZ] = mesh;
            }
            else
            {
                oldMesh = opaqueMeshes[segmentX, segmentY, segmentZ];
                opaqueMeshes[segmentX, segmentY, segmentZ] = mesh;
            }

            if (oldMesh != null)
                DetachMesh(oldMesh);

            if (mesh != null)
                AttachMesh(mesh);
        }