automated snapshot

This commit is contained in:
sumi
2025-12-18 01:01:50 -06:00
parent f982f194dd
commit 6b64903be7
5 changed files with 75 additions and 7 deletions

BIN
aphrodite Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
aphrodite.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -1,6 +1,7 @@
package main
import (
rl "github.com/gen2brain/raylib-go/raylib"
"github.com/ojrac/opensimplex-go"
)
@@ -13,14 +14,23 @@ type Field interface {
// TRANSFORM FIELDS
type ScaleField struct {
Scale float32
Field Field
Scale float32
}
func (f *ScaleField) Get(x, y float32) float32 {
return f.Field.Get(x / f.Scale, y / f.Scale)
}
type TranslateField struct {
Field Field
x, y float32
}
func (f *TranslateField) Get(x, y float32) float32 {
return f.Field.Get(x + f.x, y + f.y)
}
// NOISE FIELDS
type SimplexNoiseField struct {
@@ -31,3 +41,41 @@ func (f *SimplexNoiseField) Get(x, y float32) float32 {
return f.Noise.Eval2(x, y)
}
// IMAGE FIELDS
type ImageField struct {
image *rl.Image
pixels ImagePixels
}
type ImagePixels struct {
w, h int
colors []rl.Color
}
func (p *ImagePixels) Get(x, y int) rl.Color {
if x < 0 || x >= p.w {
return rl.Black
}
if y < 0 || y >= p.h {
return rl.Black
}
return p.colors[x + y * p.w]
}
func NewImageField(path string) ImageField {
image := rl.LoadImage(path)
colors := rl.LoadImageColors(image)
pixels := ImagePixels {
w: int(image.Width),
h: int(image.Height),
colors: colors,
}
return ImageField { image: image, pixels: pixels }
}
func (f *ImageField) Get(x, y float32) float32 {
// todo : blend colors
c := f.pixels.Get(int(x), int(y))
return Brightness(c)
}

26
main.go
View File

@@ -13,8 +13,8 @@ import (
)
const (
screenWidth = 1400
screenHeight = 700
screenWidth = 1200
screenHeight = 900
displayScale = 2
snapshotsDir = "snapshots"
)
@@ -49,20 +49,34 @@ func main() {
Zoom: 1.0,
}
/*
field :=
ScaleField {
Scale: 10.0,
Scale: 50.0,
Field: &SimplexNoiseField {
Noise: opensimplex.NewNormalized32(0),
},
}
*/
imgf := NewImageField("aphrodite.jpeg")
imageField :=
TranslateField {
x: float32(w) / 2.0,
y: float32(h) / 2.0,
//x: 5, y: 5,
Field: &ScaleField {
Scale: 4.5,
Field: &imgf,
},
}
rng := rand.New(rand.NewSource(0))
contourSketch := NewContourSketch(rng, &field)
contourSketch := NewContourSketch(rng, &imageField)
sketches := []Sketch {
//&FieldSketch { Field: &field },
//&FieldSketch { Field: &imageField },
&contourSketch,
}
@@ -156,7 +170,7 @@ func NewContourSketch(rng *rand.Rand, field Field) ContourSketch {
position: RandRadialVec(rng, 0, 500, 0, 360),
field: field,
stepSize: 0.5,
color: rl.NewColor(11, 35, 176, 200),
color: rl.NewColor(11, 35, 176, 170),
}
}

View File

@@ -21,4 +21,10 @@ func GrayCurve(v, k float32) rl.Color {
return rl.Color{R: c, G: c, B: c, A: 255}
}
func Brightness(c rl.Color) float32 {
r := float32(c.R) / 255
g := float32(c.G) / 255
b := float32(c.B) / 255
return 0.2126*r + 0.7152*g + 0.0722*b
}