public void Calculate3D(cFractalNoise fractalNoise, Vector2 texturePosition) { int i = 0; for (int x = 0; x < chunkSize.x; x++) { for (int y = 0; y < chunkSize.y; y++) { for (int z = 0; z < chunkSize.z; z++) { if (density[x, y, z] == 0) { continue; } float value = fractalNoise.Calculate(texturePosition, scale, x, y, z); if (value < 0.5f) { density[x, y, z] = 0; } i++; //if (i == 100) // yield return 1; //Debug.Log(density[x,y,z]); } } } }
public void AppendHeightMap(cFractalNoise caveFractal) { for (int x = 0; x < chunkSize.x; x++) { for (int z = 0; z < chunkSize.z; z++) { //Create 2d heighmap along the x and z axis int y2 = Mathf.Abs(Mathf.RoundToInt(heightMap[x, z] * (chunkSize.y * 0.7f))) + heightOffset; density[x, y2, z] = 1; for (int y = 0; y < chunkSize.y; y++) { if (y == y2) { continue; } else if (y < y2) { density[x, y, z] = 1; } else if (y > y2) { density[x, y, z] = 0; } } } } }
public void Initialize(cFractalNoise[] fractalNoise, cFractalNoise caveFractal, Vector3 chunkSizeInput, Vector2 xy) { chunkSize = chunkSizeInput; heightOffset = Mathf.RoundToInt(chunkSize.y * 0.3f); texturePositions = new Vector2[fractalNoise.Length]; for (int i = 0; i < fractalNoise.Length; i++) { texturePositions[i] = new Vector2(xy.y * fractalNoise[i].scale * (chunkSize.z - 1), xy.x * fractalNoise[i].scale * (chunkSize.x - 1)); } caveTexturePosition = new Vector2(xy.y * caveFractal.scale * (chunkSize.z - 1), xy.x * caveFractal.scale * (chunkSize.x - 1)); CalculateFractal(fractalNoise); AppendHeightMap(caveFractal); if (generateCaves) { Calculate3D(caveFractal, caveTexturePosition); } }