sdbox
https://gyazo.com/ad40e526671a9aa82a6c76159e80b1d7
code:glsl
float sdbox(vec3 p, vec3 s) {
vec3 d = abs(p) - s;
return min(max(max(d.x, d.y), d.z), 0.0) + length(max(d, 0.0));
}
https://gyazo.com/530aa07e13fb8845d537ae274f5dae75
考え方
d : 各次元ごとに、軸に垂直な無限平面とのSDF 一次元ならこれがそのまま答え
length( max( d, 0.0 ) ) パート: 箱の外側
dが3要素マイナスの場合は箱の内側にいるので 0.0
dが2要素マイナスの場合は面までの距離
dが1要素マイナスの場合は辺までの距離
dが全部プラスの場合は頂点までの距離
min( max( max( d.x, d.y ), d.z ), 0.0 ) パート: 箱の内側
一番面までの距離が近い要素を使う
箱の内側なので、面までの距離が近いやつは値がデカい
箱の内側を求めたい式なので、dが一つでもプラスだったら 0.0