void AddMesh(int x, int y, int z, ref Color color, MeshPart source, ChunkVertices destination) { foreach (var index in source.Indices) { destination.AddIndex(index); } var vertices = source.Vertices; for (int i = 0; i < vertices.Length; i++) { var sourceVertex = vertices[i]; var vertex = new VertexPositionNormalColorTexture { Position = sourceVertex.Position, Normal = sourceVertex.Normal, Color = color, TextureCoordinate = sourceVertex.TextureCoordinate }; // ブロック位置へ移動。 vertex.Position.X += x; vertex.Position.Y += y; vertex.Position.Z += z; // ブロックの MeshPart はその中心に原点があるため、半ブロック移動。 vertex.Position += blockMeshOffset; // チャンク メッシュはメッシュの中心位置を原点とするため、半メッシュ移動。 vertex.Position -= meshManager.MeshOffset; destination.AddVertex(ref vertex); } }
public ChunkVertexBuilder(ChunkMeshManager meshManager) { if (meshManager == null) { throw new ArgumentNullException("meshManager"); } this.meshManager = meshManager; var segmentCount = meshManager.MeshSegments.X * meshManager.MeshSegments.Y * meshManager.MeshSegments.Z; opaques = new ChunkVertices[meshManager.MeshSegments.X, meshManager.MeshSegments.Y, meshManager.MeshSegments.Z]; translucences = new ChunkVertices[meshManager.MeshSegments.X, meshManager.MeshSegments.Y, meshManager.MeshSegments.Z]; for (int z = 0; z < meshManager.MeshSegments.Z; z++) { for (int y = 0; y < meshManager.MeshSegments.Y; y++) { for (int x = 0; x < meshManager.MeshSegments.X; x++) { var segmentPosition = new IntVector3(x, y, z); opaques[x, y, z] = new ChunkVertices(); translucences[x, y, z] = new ChunkVertices(); } } } }
public ChunkVertexBuilder(ChunkMeshManager meshManager) { if (meshManager == null) throw new ArgumentNullException("meshManager"); this.meshManager = meshManager; var segmentCount = meshManager.MeshSegments.X * meshManager.MeshSegments.Y * meshManager.MeshSegments.Z; opaques = new ChunkVertices[meshManager.MeshSegments.X, meshManager.MeshSegments.Y, meshManager.MeshSegments.Z]; translucences = new ChunkVertices[meshManager.MeshSegments.X, meshManager.MeshSegments.Y, meshManager.MeshSegments.Z]; for (int z = 0; z < meshManager.MeshSegments.Z; z++) { for (int y = 0; y < meshManager.MeshSegments.Y; y++) { for (int x = 0; x < meshManager.MeshSegments.X; x++) { var segmentPosition = new IntVector3(x, y, z); opaques[x, y, z] = new ChunkVertices(); translucences[x, y, z] = new ChunkVertices(); } } } }
void AddMesh(int x, int y, int z, ref Color color, MeshPart source, ChunkVertices destination) { foreach (var index in source.Indices) destination.AddIndex(index); var vertices = source.Vertices; for (int i = 0; i < vertices.Length; i++) { var sourceVertex = vertices[i]; var vertex = new VertexPositionNormalColorTexture { Position = sourceVertex.Position, Normal = sourceVertex.Normal, Color = color, TextureCoordinate = sourceVertex.TextureCoordinate }; // ブロック位置へ移動。 vertex.Position.X += x; vertex.Position.Y += y; vertex.Position.Z += z; // ブロックの MeshPart はその中心に原点があるため、半ブロック移動。 vertex.Position += blockMeshOffset; // チャンク メッシュはメッシュの中心位置を原点とするため、半メッシュ移動。 vertex.Position -= meshManager.MeshOffset; destination.AddVertex(ref vertex); } }