more lightning; adjustable initial samples

Former-commit-id: d928ce6689411900e256a82e9f4c1371284d10fa
Former-commit-id: 52899acc116ddc400811687ed5944bd229a447b7
This commit is contained in:
Song Minjae
2016-11-04 19:12:40 +09:00
parent f8e2cb9e5d
commit 4dd74381a8
2 changed files with 9 additions and 7 deletions

View File

@@ -14,11 +14,13 @@ import java.util.*
* Created by minjaesong on 16-10-28. * Created by minjaesong on 16-10-28.
*/ */
class TileableValueNoise( class TileableValueNoise(
val octaves: Int, val persistency: Float, val width: Int) { val octaves: Int, val persistency: Float, val width: Int, val initSamples: Int = 4) {
init { init {
// FIXME wow, such primitive! // FIXME wow, such primitive!
if (!FastMath.isPowerOfTwo(width)) throw Error("width is not power of two!") if (!FastMath.isPowerOfTwo(width)) throw Error("width is not power of two!")
if (!FastMath.isPowerOfTwo(initSamples)) throw Error("initSamples is not power of two!")
if (initSamples < 2) throw Error("initSamples must be equal to or greater than 2, and power of two!")
} }
private val noiseData = Array<Float>(width + 1, { 0f }) private val noiseData = Array<Float>(width + 1, { 0f })
@@ -36,7 +38,7 @@ class TileableValueNoise(
octaveLoop@ for (octcnt in 0..octaves - 1) { // 1, 2, 3, 4, ... octaveLoop@ for (octcnt in 0..octaves - 1) { // 1, 2, 3, 4, ...
val i = octavesIntStream[octcnt] // 1, 2, 4, 8, ... val i = octavesIntStream[octcnt] // 1, 2, 4, 8, ...
// octave 1 samples four points // octave 1 samples four points
val samples = 8 * i val samples = initSamples * i
val amp = FastMath.pow(persistency, octcnt.toFloat()) // 1/1, 1/2, 1/3, 1/4, ... val amp = FastMath.pow(persistency, octcnt.toFloat()) // 1/1, 1/2, 1/3, 1/4, ...
var pointThis = 0f var pointThis = 0f
var pointNext = rng.nextBipolarFloat() var pointNext = rng.nextBipolarFloat()

View File

@@ -54,12 +54,12 @@ class StateTestingSandbox : BasicGameState() {
private var timer = 0 private var timer = 0
private var regenTime = 17 private var regenTime = 17
private var seed = 1L private var seed = System.nanoTime()
val samples = 256 val samples = 128
val lightningXgen = TileableValueNoise(8, 0.67f, samples) val lightningXgen = TileableValueNoise(8, 0.67f, samples, 8)
val lightningYgen = TileableValueNoise(8, 0.36f, samples) val lightningYgen = TileableValueNoise(8, 0.58f, samples, 4)
override fun render(container: GameContainer, game: StateBasedGame, g: Graphics) { override fun render(container: GameContainer, game: StateBasedGame, g: Graphics) {
g.color = ColourTemp(7500) g.color = ColourTemp(7500)
@@ -73,7 +73,7 @@ class StateTestingSandbox : BasicGameState() {
val ampY = 40f val ampY = 40f
val ampX = 3 val ampX = 6
val xoff = 10f val xoff = 10f
val yoff = 300f val yoff = 300f