@@ -65,16 +65,19 @@ sdBoxFrame p b e =
65
65
]
66
66
67
67
-- Torus - exact
68
+ -- The torus axis is Y
69
+ -- tx: torus radius
70
+ -- ty: torus section radius
68
71
sdTorus :: V3 FFloat -> V2 FFloat -> FFloat
69
72
sdTorus (V3 px py pz) (V2 tx ty) = norm (V2 (norm (V2 px pz) - tx) py) - ty
70
73
71
74
-- Capped Torus - exact (https://www.shadertoy.com/view/tl23RK)
72
75
sdCappedTorus :: V3 FFloat -> V2 FFloat -> FFloat -> FFloat -> FFloat
73
76
sdCappedTorus p@ (V3 px py pz) sc@ (V2 scx scy) ra rb =
74
77
let p'@ (V3 px' py' pz') = V3 (abs px) py pz
75
- pxy = p'^. _xy
76
- k = ifThenElse' (scy * px' >* scx * py') (dot pxy sc) (norm pxy )
77
- in sqrt (dot p' p' + ra * ra - 2.0 * ra * k) - rb
78
+ p'xy = p'^. _xy
79
+ k = ifThenElse' (scy * px' >* scx * py') (dot p'xy sc) (norm p'xy )
80
+ in sqrt (dot p' p' + ra * ra - 2 * ra * k) - rb
78
81
79
82
-- Link - exact (https://www.shadertoy.com/view/wlXSD7)
80
83
sdLink :: V3 FFloat -> FFloat -> FFloat -> FFloat -> FFloat
@@ -126,10 +129,10 @@ sdHexPrism :: V3 FFloat -> V2 FFloat -> FFloat
126
129
sdHexPrism p' (V2 hx hy) =
127
130
let splitXY_Z (V3 x y z) = (V2 x y, z)
128
131
(kxy, kz) = splitXY_Z (V3 (- 0.8660254 ) 0.5 0.57735 )
129
- (pxy , pz) = splitXY_Z (abs p')
130
- V2 px py = pxy - 2 * minB (dot kxy pxy ) 0 *^ kxy
132
+ (p'xy , pz) = splitXY_Z (abs p')
133
+ pxy @ ( V2 px py) = p'xy - 2 * minB (dot kxy p'xy ) 0 *^ kxy
131
134
d@ (V2 dx dy) = V2
132
- (norm (V2 px py - V2 (clamp px (- kz * hx) (kz * hx)) hx) * signum (py - hx))
135
+ (norm (V2 px py - V2 (clamp px (- kz * hx) (kz * hx)) hx) * signum (py - hx))
133
136
(pz - hy)
134
137
in minB (maxB dx dy) 0 + norm (maxB 0 <$> d)
135
138
@@ -429,17 +432,17 @@ sceneDistance' p = (f p, red) where
429
432
-- sdBox p (V3 2 4 6)
430
433
-- sdRoundBox p (V3 2 4 6) 1
431
434
-- sdBoxFrame p (V3 2 4 6) (V3 0.1 0.2 0.3)
432
- f p = sdTorus p (V2 5 1 )
433
- -- sdCappedTorus
434
- -- sdLink
435
- -- sdCylinder
436
- -- sdCone
437
- -- sdBoundCone
438
- -- sdInfiniteCone
439
- -- sdPlane
440
- -- sdHexPrism
441
- -- sdTriPrism
442
- -- sdCapsule
435
+ -- sdTorus p (V2 5 1)
436
+ -- sdCappedTorus p (V2 (sin 1) (cos 1)) 5 1
437
+ -- sdLink p 2 5 1
438
+ -- sdCylinder p (V3 2 4 6)
439
+ -- sdCone p (V2 (sin 0.5) (cos 0.5)) 5
440
+ -- sdBoundCone p (V2 (sin 0.5) (cos 0.5)) 5
441
+ -- sdInfiniteCone p (V2 (sin 0.5) (cos 0.5))
442
+ -- sdPlane p (signorm $ V3 2 1 5) 3
443
+ -- sdHexPrism p (V2 2 4)
444
+ -- sdTriPrism p (V2 4 2)
445
+ f p = sdCapsule p ( V3 2 4 6 ) ( V3 1 2 3 ) 3
443
446
-- sdVerticalCapsule
444
447
-- sdCappedCylinder
445
448
-- sdArbitraryCappedCylinder
0 commit comments