diff --git a/src/main.go b/src/main.go index 1868e3b..e9e0ad8 100644 --- a/src/main.go +++ b/src/main.go @@ -13,8 +13,8 @@ import ( rl "github.com/gen2brain/raylib-go/raylib" ) -const WIDTH = 100 -const HEIGHT = 100 +const WIDTH = 200 +const HEIGHT = 200 const TEXTURE_SCALE = 4 const MAX_DIST = 500.0 diff --git a/src/material.go b/src/material.go index d9075ee..e9d3b70 100644 --- a/src/material.go +++ b/src/material.go @@ -1,6 +1,8 @@ package main -import "math" +import ( + "math" +) type Color interface { GetColor(Vector3) Vector3 diff --git a/src/ray_marching.go b/src/ray_marching.go index d7b806f..911ac74 100644 --- a/src/ray_marching.go +++ b/src/ray_marching.go @@ -39,7 +39,7 @@ func shadow(point Vector3) float64 { } res = min(res, SOFT_SHADOW_COEFF*dist/dist_total) dist_total += dist - p = p.Add(direction.Scale(dist)) + p.Radd(direction.Scale(dist)) } return res } @@ -55,7 +55,7 @@ func rayMarch(origin Vector3, direction Vector3) (bool, Vector3) { if dist > MAX_DIST { break } - p = p.Add(direction.Scale(dist)) + p.Radd(direction.Scale(dist)) } return false, GREY } diff --git a/src/sdf.go b/src/sdf.go index 64f52c0..ca576d2 100644 --- a/src/sdf.go +++ b/src/sdf.go @@ -73,7 +73,7 @@ type UnionSDF struct { func (s UnionSDF) Distance(p Vector3) (float64, *Material) { d1, color1 := s.primitive1.Distance(p) d2, color2 := s.primitive2.Distance(p) - d := math.Min(d1, d2) + d := min(d1, d2) color := color1 if d2 < d1 { @@ -91,7 +91,7 @@ func (s SubstractionSDF) Distance(p Vector3) (float64, *Material) { d1, color1 := s.primitive1.Distance(p) d2, _ := s.primitive2.Distance(p) - d := math.Max(d1, -d2) + d := max(d1, -d2) return d, color1 } @@ -104,7 +104,7 @@ func (s IntersectionSDF) Distance(p Vector3) (float64, *Material) { d1, mat1 := s.primitive1.Distance(p) d2, mat2 := s.primitive2.Distance(p) - d := math.Max(d1, d2) + d := max(d1, d2) var mat Material = MixedMaterial{mat1, mat2, 0.5, p} return d, &mat @@ -120,8 +120,8 @@ func (s SmoothUnionSDF) Distance(p Vector3) (float64, *Material) { k := 4 * s.k d1, mat1 := s.primitive1.Distance(p) d2, mat2 := s.primitive2.Distance(p) - h := math.Max(k-math.Abs(d1-d2), 0.0) - d := math.Min(d1, d2) - h*h*0.25/k + h := max(k-math.Abs(d1-d2), 0.0) + d := min(d1, d2) - h*h*0.25/k t := SmoothStep(d2-d1, -k, k) var mat Material = MixedMaterial{mat2, mat1, t, p} return d, &mat @@ -137,8 +137,8 @@ func (s SmoothSubstractionSDF) Distance(p Vector3) (float64, *Material) { k := 4 * s.k d1, mat1 := s.primitive1.Distance(p) d2, mat2 := s.primitive2.Distance(p) - h := math.Max(k-math.Abs(-d1-d2), 0.0) - d := math.Max(d1, -d2) + h*h*0.25/k + h := max(k-math.Abs(-d1-d2), 0.0) + d := max(d1, -d2) + h*h*0.25/k t := SmoothStep(d1-d2, -k, k) var mat Material = MixedMaterial{mat1, mat2, t, p} return d, &mat @@ -154,8 +154,8 @@ func (s SmoothIntersectionSDF) Distance(p Vector3) (float64, *Material) { k := 4 * s.k d1, mat1 := s.primitive1.Distance(p) d2, mat2 := s.primitive2.Distance(p) - h := math.Max(k-math.Abs(d1-d2), 0.0) - d := math.Max(d1, d2) + h*h*0.25/k + h := max(k-math.Abs(d1-d2), 0.0) + d := max(d1, d2) + h*h*0.25/k t := SmoothStep(d2-d1, -k, k) var mat Material = MixedMaterial{mat1, mat2, t, p} return d, &mat diff --git a/src/vec3.go b/src/vec3.go index 7aea4c9..3f02686 100644 --- a/src/vec3.go +++ b/src/vec3.go @@ -16,12 +16,18 @@ func (u Vector3) Add(v Vector3) Vector3 { return Vector3{u.X + v.X, u.Y + v.Y, u.Z + v.Z} } +func (u *Vector3) Radd(v Vector3) { + u.X += v.X + u.Y += v.Y + u.Z += v.Z +} + func (u Vector3) Neg() Vector3 { return Vector3{-u.X, -u.Y, -u.Z} } func (u Vector3) Sub(v Vector3) Vector3 { - return u.Add(v.Neg()) + return Vector3{u.X - v.X, u.Y - v.Y, u.Z - v.Z} } func (u Vector3) Scale(a float64) Vector3 {