automated snapshot
This commit is contained in:
@@ -11,10 +11,11 @@ type ContourLayer struct {
|
|||||||
maxActors uint32
|
maxActors uint32
|
||||||
actors []*Actor
|
actors []*Actor
|
||||||
actorIndex uint32
|
actorIndex uint32
|
||||||
|
actorColor rl.Color
|
||||||
rng *rand.Rand
|
rng *rand.Rand
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewContourLayer(sketch *Sketch, rng *rand.Rand, field Field) *ContourLayer {
|
func NewContourLayer(sketch *Sketch, rng *rand.Rand, field Field, color rl.Color) *ContourLayer {
|
||||||
|
|
||||||
maxActors := 200000
|
maxActors := 200000
|
||||||
|
|
||||||
@@ -25,15 +26,14 @@ func NewContourLayer(sketch *Sketch, rng *rand.Rand, field Field) *ContourLayer
|
|||||||
field: field,
|
field: field,
|
||||||
actors: actors,
|
actors: actors,
|
||||||
maxActors: uint32(maxActors),
|
maxActors: uint32(maxActors),
|
||||||
|
actorColor: color,
|
||||||
actorIndex: 0,
|
actorIndex: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
//layer.AddActors(1, sketch.sourceWidth, sketch.sourceHeight)
|
|
||||||
|
|
||||||
return &layer
|
return &layer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ContourLayer) AddActors(n, sourceWidth, sourceHeight int32) {
|
func (s *ContourLayer) AddActors(color rl.Color, n, sourceWidth, sourceHeight int32) {
|
||||||
for range n {
|
for range n {
|
||||||
x := s.rng.Int31() % sourceWidth
|
x := s.rng.Int31() % sourceWidth
|
||||||
y := s.rng.Int31() % sourceHeight
|
y := s.rng.Int31() % sourceHeight
|
||||||
@@ -42,7 +42,7 @@ func (s *ContourLayer) AddActors(n, sourceWidth, sourceHeight int32) {
|
|||||||
position: rl.Vector2{X: float32(x), Y: float32(y)},
|
position: rl.Vector2{X: float32(x), Y: float32(y)},
|
||||||
field: s.field,
|
field: s.field,
|
||||||
stepSize: 1,
|
stepSize: 1,
|
||||||
color: rl.NewColor(11, 35, 176, 50),
|
color: s.actorColor,
|
||||||
}
|
}
|
||||||
s.actors[s.actorIndex] = newActor
|
s.actors[s.actorIndex] = newActor
|
||||||
s.actorIndex = (s.actorIndex + 1) % s.maxActors
|
s.actorIndex = (s.actorIndex + 1) % s.maxActors
|
||||||
@@ -50,7 +50,7 @@ func (s *ContourLayer) AddActors(n, sourceWidth, sourceHeight int32) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *ContourLayer) Update(ctx *RenderCtx) {
|
func (s *ContourLayer) Update(ctx *RenderCtx) {
|
||||||
s.AddActors(100, ctx.SourceWidth, ctx.SourceHeight)
|
s.AddActors(s.actorColor, 100, ctx.SourceWidth, ctx.SourceHeight)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ContourLayer) Draw(ctx *RenderCtx) {
|
func (s *ContourLayer) Draw(ctx *RenderCtx) {
|
||||||
|
|||||||
62
internal/graphics/graphics.go
Normal file
62
internal/graphics/graphics.go
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package graphics
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
rl "github.com/gen2brain/raylib-go/raylib"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
FlourescentHues = []float32{
|
||||||
|
0, // hot magenta-red
|
||||||
|
30, // neon orange
|
||||||
|
60, // acid yellow
|
||||||
|
120, // laser green
|
||||||
|
180, // cyan
|
||||||
|
210, // electric blue
|
||||||
|
270, // ultraviolet purple
|
||||||
|
}
|
||||||
|
FlourescentColors = makeFlourescentColors()
|
||||||
|
)
|
||||||
|
|
||||||
|
func makeFlourescentColors() []rl.Color {
|
||||||
|
fc := make([]rl.Color, len(FlourescentHues))
|
||||||
|
for i, hue := range(FlourescentHues) {
|
||||||
|
fc[i] = rl.ColorFromHSV(hue, 1.0, 1.0)
|
||||||
|
}
|
||||||
|
return fc
|
||||||
|
}
|
||||||
|
|
||||||
|
type ColorCycle interface {
|
||||||
|
Next() rl.Color
|
||||||
|
}
|
||||||
|
|
||||||
|
type ArrayBackedColorCycle struct {
|
||||||
|
colors []rl.Color
|
||||||
|
index int
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFixedColorCycle(colors []rl.Color) ArrayBackedColorCycle {
|
||||||
|
return ArrayBackedColorCycle {
|
||||||
|
colors: colors,
|
||||||
|
index: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c ArrayBackedColorCycle) Shuffle(seed int64) ColorCycle {
|
||||||
|
r := rand.New(rand.NewSource(seed))
|
||||||
|
cprime := &ArrayBackedColorCycle {
|
||||||
|
colors: make([]rl.Color, len(c.colors)),
|
||||||
|
index: 0,
|
||||||
|
}
|
||||||
|
r.Shuffle(len(c.colors), func(i, j int) {
|
||||||
|
cprime.colors[i] = c.colors[j]
|
||||||
|
})
|
||||||
|
return cprime
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ArrayBackedColorCycle) Next() rl.Color {
|
||||||
|
color := c.colors[c.index]
|
||||||
|
c.index = (c.index + 1) % len(c.colors)
|
||||||
|
return color
|
||||||
|
}
|
||||||
|
|
||||||
29
main.go
29
main.go
@@ -1,13 +1,15 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
// "fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
"flag"
|
"flag"
|
||||||
|
|
||||||
|
g "github.com/d2fn/sumi/internal/graphics"
|
||||||
|
|
||||||
gui "github.com/gen2brain/raylib-go/raygui"
|
gui "github.com/gen2brain/raylib-go/raygui"
|
||||||
rl "github.com/gen2brain/raylib-go/raylib"
|
rl "github.com/gen2brain/raylib-go/raylib"
|
||||||
//"github.com/ojrac/opensimplex-go"
|
//"github.com/ojrac/opensimplex-go"
|
||||||
@@ -46,12 +48,16 @@ func main() {
|
|||||||
|
|
||||||
BlendModeToggleGroupActive := int32(0)
|
BlendModeToggleGroupActive := int32(0)
|
||||||
|
|
||||||
|
// reproducable flourescent color cycle
|
||||||
|
colorCycle := g.NewFixedColorCycle(g.FlourescentColors)//.Shuffle(0)
|
||||||
|
|
||||||
rl.SetTargetFPS(60)
|
rl.SetTargetFPS(60)
|
||||||
t0 := time.Now()
|
t0 := time.Now()
|
||||||
|
|
||||||
rng := rand.New(rand.NewSource(0))
|
rng := rand.New(rand.NewSource(0))
|
||||||
//imageField := NewImageField("/home/d/Dropbox/art/data/david.png")
|
imageField := NewImageField("/home/d/Dropbox/art/data/david.png")
|
||||||
imageField := NewImageField("/home/d/Dropbox/art/data/bassrockastro/Photo Dec 24 2025, 5 58 23 PM.jpg")
|
//imageField := NewImageField("/home/d/Dropbox/art/data/bassrockastro/Photo Dec 24 2025, 5 58 23 PM.jpg")
|
||||||
|
//imageField := NewImageField("/home/d/Dropbox/art/data/bassrockastro/andromeda.jpg")
|
||||||
//imageField := NewImageField("/home/d/Dropbox/art/data/moses_statue.jpg")
|
//imageField := NewImageField("/home/d/Dropbox/art/data/moses_statue.jpg")
|
||||||
field :=
|
field :=
|
||||||
&TranslateField {
|
&TranslateField {
|
||||||
@@ -66,11 +72,24 @@ func main() {
|
|||||||
|
|
||||||
sketch := NewSketch(sourceWidth, sourceHeight)
|
sketch := NewSketch(sourceWidth, sourceHeight)
|
||||||
|
|
||||||
|
fieldColor := colorCycle.Next()
|
||||||
|
fmt.Printf("field color = %v\n", fieldColor)
|
||||||
|
|
||||||
|
|
||||||
sketch.AddColorLayer("background-magenta", rl.Magenta)
|
sketch.AddColorLayer("background-magenta", rl.Magenta)
|
||||||
sketch.AddColorLayer("background-black", rl.Black)
|
sketch.AddColorLayer("background-black", rl.Black)
|
||||||
sketch.AddLayer("field", &FieldLayer{field: field, loColor: rl.NewColor(0, 0, 0, 0), hiColor: rl.Yellow, dirty: true})
|
sketch.AddLayer("field", &FieldLayer{field: field, loColor: rl.NewColor(0, 0, 0, 0), hiColor: fieldColor, dirty: true})
|
||||||
contourLayer := NewContourLayer(&sketch, rng, field)
|
actorColor := colorCycle.Next()
|
||||||
|
|
||||||
|
fmt.Printf("actor color = %v\n", actorColor)
|
||||||
|
|
||||||
|
hsv := rl.ColorToHSV(actorColor);
|
||||||
|
hsv.Z *= 0.7
|
||||||
|
actorColor = rl.ColorFromHSV(hsv.X, hsv.Y, hsv.Z)
|
||||||
|
actorColor.A = 50
|
||||||
|
//NewColor(11, 35, 176, 50),
|
||||||
|
//r
|
||||||
|
contourLayer := NewContourLayer(&sketch, rng, field, actorColor)
|
||||||
sketch.AddLayer("contours", contourLayer)
|
sketch.AddLayer("contours", contourLayer)
|
||||||
sketch.AddLayer("sierpinski-arrowhead", sierpinskiLayer)
|
sketch.AddLayer("sierpinski-arrowhead", sierpinskiLayer)
|
||||||
// aurora := NewImageLayer("/home/d/Dropbox/photos/Events/2025/Aurora/Photo Nov 11 2025, 9 52 03 PM.jpg")
|
// aurora := NewImageLayer("/home/d/Dropbox/photos/Events/2025/Aurora/Photo Nov 11 2025, 9 52 03 PM.jpg")
|
||||||
|
|||||||
Reference in New Issue
Block a user