Package com.jme3.terrain.noise.fractal

Source Code of com.jme3.terrain.noise.fractal.FractalSum

/**
* Copyright (c) 2011, Novyon Events
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anthyon
*/
package com.jme3.terrain.noise.fractal;

import com.jme3.terrain.noise.Basis;
import com.jme3.terrain.noise.ShaderUtils;
import com.jme3.terrain.noise.basis.ImprovedNoise;
import com.jme3.terrain.noise.basis.Noise;

/**
* FractalSum is the simplest form of fractal functions summing up a few octaves
* of the noise value with an ever decreasing (0 < roughness < 1) amplitude
*
* lacunarity = 2.0f is the classical octave distance
*
* Note: though noise basis functions are generally designed to return value
* between -1..1, there sum can easily be made to extend out of this range. To
* handle this is up to the user.
*
* @author Anthyon
*
*/
public class FractalSum extends Noise implements Fractal {

  private Basis basis;
  private float lacunarity;
  private float amplitude;
  private float roughness;
  private float frequency;
  private float octaves;
  private int maxFreq;

  public FractalSum() {
    this.basis = new ImprovedNoise();
    this.lacunarity = 2.124367f;
    this.amplitude = 1.0f;
    this.roughness = 0.6f;
    this.frequency = 1f;
    this.setOctaves(1);
  }

  @Override
  public float value(final float x, final float y, final float z) {
    float total = 0;

    for (float f = this.frequency, a = this.amplitude; f < this.maxFreq; f *= this.lacunarity, a *= this.roughness) {
      total += this.basis.value(this.scale * x * f, this.scale * y * f, this.scale * z * f) * a;
    }

    return ShaderUtils.clamp(total, -1, 1);
  }

  @Override
  public Fractal addBasis(final Basis basis) {
    this.basis = basis;
    return this;
  }

  public float getOctaves() {
    return this.octaves;
  }

  @Override
  public Fractal setOctaves(final float octaves) {
    this.octaves = octaves;
    this.maxFreq = 1 << (int) octaves;
    return this;
  }

  public float getFrequency() {
    return this.frequency;
  }

  @Override
  public Fractal setFrequency(final float frequency) {
    this.frequency = frequency;
    return this;
  }

  public float getRoughness() {
    return this.roughness;
  }

  @Override
  public Fractal setRoughness(final float roughness) {
    this.roughness = roughness;
    return this;
  }

  public float getAmplitude() {
    return this.amplitude;
  }

  @Override
  public Fractal setAmplitude(final float amplitude) {
    this.amplitude = amplitude;
    return this;
  }

  public float getLacunarity() {
    return this.lacunarity;
  }

  @Override
  public Fractal setLacunarity(final float lacunarity) {
    this.lacunarity = lacunarity;
    return this;
  }

  @Override
  public void init() {

  }

}
TOP

Related Classes of com.jme3.terrain.noise.fractal.FractalSum

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.