libgarbage: add square helix

This commit is contained in:
Crispy 2023-07-31 20:53:38 +02:00
parent 9bf8c0962b
commit 9befad0a59
2 changed files with 29 additions and 10 deletions

View file

@ -86,11 +86,28 @@ float sdHelix(float3 p, float r1, float r2, float incline) {
float angle = atan2(p.z, p.x); // angle around y axis
float y = angle * incline - p.y;
y = fmod(y, UNITY_PI * incline * 2) + UNITY_PI * incline;
// 2d circle
float dist = length(float2(x2, y)) - r2;
return dist * 0.8;
}
_MAT_VARIANT3(mHelix, sdHelix, float, float, float)
// box = (width, height, rotation)
float sdHelixSquare(float3 p, float r1, float3 box, float incline) {
float x2 = length(p.xz) - r1; // vertical plane
float angle = atan2(p.z, p.x); // angle around y axis
float y = angle * incline - p.y;
y = fmod(y, UNITY_PI * incline * 2) + UNITY_PI * incline;
// rotated 2d box
float2 p2 = float2(x2, y);
p2 = mul(float2x2(cos(box.z), -sin(box.z), sin(box.z), cos(box.z)), p2);
float2 d = abs(p2) - box.xy;
float dist = length(max(d, 0)) + min(max(d.x, d.y), 0);
return dist * 0.8;
}
_MAT_VARIANT3(mHelixSquare, sdHelixSquare, float, float3, float)
float sdLine(float3 p, float3 a, float3 b, float r) {
float3 pa = p - a;
float3 ba = b - a;
@ -106,6 +123,7 @@ float sdGyroid(float3 p, float scale, float bias, float thickness) {
}
_MAT_VARIANT3(mGyroid, sdGyroid, float, float, float)
SurfacePoint mFromDist(float d, Material mat = DEFAULT_MAT) {
SurfacePoint o;
o.dist = d;