diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml new file mode 100644 index 0000000..91d1833 --- /dev/null +++ b/.forgejo/workflows/build.yml @@ -0,0 +1,26 @@ +name: Build Go (Linux + Windows) + +on: + push: + workflow_dispatch: + +jobs: + build: + runs-on: docker + container: + image: git.rufous-trench.ts.net/crizomb/forgejo-action-goraylib:deb13-node20-go1.24 + steps: + - uses: actions/checkout@v4 + + - name: Build binaries + run: | + cd src + mkdir -p builds_artifact + GOOS=linux GOARCH=amd64 go build -o builds_artifact/raymarchgo-linux-amd64 + GOOS=windows GOARCH=amd64 go build -o builds_artifact/raymarchgo-windows-amd64.exe + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: DebugBuilds + path: src/builds_artifact diff --git a/README.md b/README.md index 725c7a3..09bfbff 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ Simple cpu ray-marching in go Focus on Lisiblity & Features + + + +also used to test CI/CD things currently +inc=2 diff --git a/src/app-linux-amd64 b/src/app-linux-amd64 new file mode 100755 index 0000000..7871720 Binary files /dev/null and b/src/app-linux-amd64 differ diff --git a/src/go.mod b/src/go.mod index 468a4ae..97073ed 100644 --- a/src/go.mod +++ b/src/go.mod @@ -1,4 +1,4 @@ -module test_raylib +module raymarching_go go 1.24.7 diff --git a/src/main.go b/src/main.go index 1df88ac..a8e2015 100644 --- a/src/main.go +++ b/src/main.go @@ -15,7 +15,7 @@ import ( const WIDTH = 200 const HEIGHT = 200 -const TEXTURE_SCALE = 2 +const TEXTURE_SCALE = 4 const MAX_DIST = 500.0 const MAX_STEP = 100 @@ -23,9 +23,6 @@ const EPS = 0.1 const PI = math.Pi const SOFT_SHADOW_COEFF = 16 -const LIGHT_POWER_EXP = 2.0 - -var LIGHT_POWER_FAC float64 = 2.0 var lightPos Vector3 var scene SDF @@ -36,8 +33,8 @@ var screenPhysicalSize float64 var cameraPos Vector3 func init() { - lightPos = Vector3{0, -200, 100} - LIGHT_POWER_FAC = math.Pow(lightPos.Length(), LIGHT_POWER_EXP) * LIGHT_POWER_FAC + lightPos = Vector3{100, -400, 400} + cameraPos = Vector3{0, -10, 25} screenSpherical = Vector3{10, PI/2 + 0.2, PI / 2} screenPhysicalSize = 5 @@ -46,9 +43,11 @@ func init() { func update(t float64) { sphereMat := RED_MAT + sphereMat2 := GREEN_MAT sphereMat.specularFac = 0.5 + sphereMat2.specularFac = 0.5 sphere := TranslatedSDF{Sphere{10, sphereMat}, Vector3{-15, 100, 10}} - sphere2 := TranslatedSDF{Sphere{10, sphereMat}, Vector3{15, 100, 10}} + sphere2 := TranslatedSDF{Sphere{10, sphereMat2}, Vector3{15, 100, 10}} // boxMat := BLUE_MAT // box := TranslatedSDF{Box{Vector3{10, 2, 10}, boxMat}, Vector3{0, 100, 10}} diff --git a/src/ray_marching.go b/src/ray_marching.go index b9c59b3..0cf1b17 100644 --- a/src/ray_marching.go +++ b/src/ray_marching.go @@ -9,30 +9,26 @@ import ( ) func phongShading(point Vector3, normal Vector3, mat Material) Vector3 { - lightVecNormalized := (lightPos.Sub(point)).Normalized() - - reflectLight := Reflect(lightVecNormalized, normal) + lightVec := (lightPos.Sub(point)).Normalized() + reflectLight := Reflect(lightVec, normal) eyeVec := (cameraPos.Sub(point)).Normalized() brutMat := mat.GetMaterialBrut() ambiant := brutMat.ambiantColor.GetColor(point) - diffusePower := brutMat.diffuseFac * max(0, normal.Dot(lightVecNormalized)) + diffusePower := brutMat.diffuseFac * max(0, normal.Dot(lightVec)) diffuse := brutMat.diffuseColor.GetColor(point).Scale(diffusePower) specularPower := brutMat.specularFac * math.Pow(max(0, reflectLight.Dot(eyeVec)), brutMat.specularExp) specular := brutMat.specularColor.GetColor(point).Scale(specularPower) - return (ambiant.Add(diffuse).Add(specular)) + return ambiant.Add(diffuse).Add(specular) } func shadow(point Vector3) float64 { - lightVec := (lightPos.Sub(point)) - lightVecLength := lightVec.Length() - direction := lightVec.Scale(1 / lightVecLength) + direction := (lightPos.Sub(point)).Normalized() p := point.Add(direction.Scale(5 * EPS)) res := 1.0 dist_total := 0.0 - lightPower := LIGHT_POWER_FAC / math.Pow(lightVecLength, LIGHT_POWER_EXP) for range MAX_STEP { dist := scene.Distance(p) if dist < EPS { @@ -45,7 +41,7 @@ func shadow(point Vector3) float64 { dist_total += dist p.Radd(direction.Scale(dist)) } - return res * lightPower + return res } func reflect(point Vector3, direction Vector3, normal Vector3, mat Material, reflectNumber int) Vector3 { @@ -71,7 +67,7 @@ func rayMarch(origin Vector3, direction Vector3, reflectNumber int) (bool, Vecto mat := scene.GetMaterial(p) normal := Gradient(scene, p, EPS).Normalized() phongShade := phongShading(p, normal, mat) - shadowCoeff := max(shadow(p), 0.1) + shadowCoeff := max(shadow(p), 0.3) reflectColor := reflect(p, direction, normal, mat, reflectNumber) return true, phongShade.Add(reflectColor).Scale(shadowCoeff) // return true, phongShading(p, normal, *mat) diff --git a/src/raymarching_go b/src/raymarching_go new file mode 100755 index 0000000..7871720 Binary files /dev/null and b/src/raymarching_go differ