} // public struct TerrainSample //================================================================== static public TerrainSample GetTerrainSample(Vector3 coordinates) { Vector3 noiseCoordinates = new Vector3(coordinates.x - _heightmapNoiseSettings.offsetX, _heightmapNoiseSettings.offsetY, coordinates.z - _heightmapNoiseSettings.offsetZ); // get a NoiseSample at the given coordinates NoiseGenerator.NoiseSample noiseSample = NoiseGenerator.Sum( NoiseGenerator.methods[(int)_heightmapNoiseSettings.type], noiseCoordinates, _heightmapNoiseSettings.frequency, _heightmapNoiseSettings.octaves, _heightmapNoiseSettings.lacunarity, _heightmapNoiseSettings.persistence); if (!_isIsland) { noiseSample = (noiseSample + 1f) * 0.5f; //noiseSample.value = _heightmapNoiseSettings.adjustmentCurve.Evaluate(noiseSample.value); noiseSample *= _heightmapMaxHeight; } else { noiseSample = (noiseSample + 1f) * 0.5f; //noiseSample.value = _heightmapNoiseSettings.adjustmentCurve.Evaluate(noiseSample.value); float fallofStartRadius = _islandRadiusMin * _heightmapSize * 0.5f * _nTilesHorizontal; float fallofEndRadius = _islandRadiusMax * _heightmapSize * 0.5f * _nTilesHorizontal; noiseSample *= QuadraticFallofCurve(coordinates, fallofStartRadius, fallofEndRadius); noiseSample *= _heightmapMaxHeight; } // Return a new TerrainSample = adjusted NoiseSample + additional info about normal vector and steepness TerrainSample newTerrainSample = new TerrainSample { height = noiseSample.value, derivative = noiseSample.derivative, normal = new Vector3(-noiseSample.derivative.x, 1f, -noiseSample.derivative.z).normalized }; newTerrainSample.steepness = Vector3.Angle(Vector3.up, newTerrainSample.normal); return newTerrainSample; } // static public TerrainSample GetTerrainSample(Vector3 coordinates)
public override void Initialize() { sample = new TerrainSample(); Name = sample.Metadata[ "Title" ] + " Sample"; AddSample( sample ); }