private void UpdateChunkMesh() { positionsList.Clear(); directionList.Clear(); for (int i = 0; i < test; i++) { positionsList.AddRange(chunkFace[i].Update(viewerPosition)); directionList.AddRange(chunkFace[i].GetDirectionList()); } viewedChunkCoord = positionsList.ToArray(); directionArray = directionList.ToArray(); if (viewedChunkCoord.Length > 0) { drawMesh.UpdateData(positionsList.Count, viewedChunkCoord, directionArray); } }
public Chunk(float scale, int chunkSize, Material instanceMaterial, Transform viewer) { directions = new Vector3[] { new Vector3(-1, 0, 0), new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, -1, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1) }; directionsY = new Vector3[] { new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1), new Vector3(0, 0, 1), new Vector3(1, 0, 0), new Vector3(1, 0, 0) }; Vector3 axisA = new Vector3(directions[0].y, directions[0].z, directions[0].x); Vector3 axisB = Vector3.Cross(directions[0], axisA); this.scale = scale; this.chunkSize = chunkSize; this.viewer = viewer; planetRadius = (chunkSize - 1) * scale / 2; viewerPosition = viewer.position; chunkFace = new ChunkFace[6]; chunkFace[0] = new ChunkFace(null, new Vector3(0, 0, planetRadius), this.scale, (chunkSize - 1), viewerPosition, directions[0], directionsY[0]); chunkFace[1] = new ChunkFace(null, new Vector3(0, 0, -planetRadius), this.scale, (chunkSize - 1), viewerPosition, directions[1], directionsY[1]); chunkFace[2] = new ChunkFace(null, new Vector3(planetRadius, 0, 0), this.scale, (chunkSize - 1), viewerPosition, directions[2], directionsY[2]); chunkFace[3] = new ChunkFace(null, new Vector3(-planetRadius, 0, 0), this.scale, (chunkSize - 1), viewerPosition, directions[3], directionsY[3]); chunkFace[4] = new ChunkFace(null, new Vector3(0, planetRadius, 0), this.scale, (chunkSize - 1), viewerPosition, directions[4], directionsY[4]); chunkFace[5] = new ChunkFace(null, new Vector3(0, -planetRadius, 0), this.scale, (chunkSize - 1), viewerPosition, directions[5], directionsY[5]); meshData = MeshGenerator.GenerateTerrainMesh(chunkSize); meshData.CreateMesh(); drawMesh = new DrawMesh(meshData.GetMesh(), instanceMaterial); for (int i = 0; i < test; i++) { positionsList.AddRange(chunkFace[i].GetPositionList()); directionList.AddRange(chunkFace[i].GetDirectionList()); } viewedChunkCoord = positionsList.ToArray(); directionArray = directionList.ToArray(); drawMesh.UpdateData(positionsList.Count, viewedChunkCoord, directionArray); // UpdateChunkMesh(); }