29 lines
633 B
Go
29 lines
633 B
Go
|
|
package math
|
||
|
|
|
||
|
|
import (
|
||
|
|
opensimplex "github.com/ojrac/opensimplex-go"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Noise utility to sample simplex noise
|
||
|
|
type Noise struct {
|
||
|
|
opensimplex.Noise
|
||
|
|
Seed int
|
||
|
|
Freq float32
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewNoise creates a new noise struct from a seed value and a frequency factor.
|
||
|
|
func NewNoise(seed int, freq float32) *Noise {
|
||
|
|
return &Noise{
|
||
|
|
Noise: opensimplex.New(int64(seed)),
|
||
|
|
Seed: seed,
|
||
|
|
Freq: freq,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Sample the noise at a certain position
|
||
|
|
func (n *Noise) Sample(x, y, z int) float32 {
|
||
|
|
// jeez
|
||
|
|
fx, fy, fz := float64(float32(x)*n.Freq), float64(float32(y)*n.Freq), float64(float32(z)*n.Freq)
|
||
|
|
return float32(n.Eval3(fx, fy, fz))
|
||
|
|
}
|