SDF正方形公式
阅读
2024-04-04更新
最新编辑:glamcurrent
阅读:
更新日期:2024-04-04
最新编辑:glamcurrent
对于正方形,我们的目标是求某一点R(某一光线的行进路径上是否遇到正方形表面)与矩形中心的距离,若小于或等于在实际边界点到矩形中心的距离,那说明成功击中正方形。
[math]\displaystyle{
\begin {array}{l}
设正方形中心点为O,随机的点为P\\
在OP两点连成的直线上的实际矩形边缘点为R,PR两点的距离设为d:\\
1) d=P_{x}-R_{x}\\
2) d=P_{y}-R_{y}\\
3) d=\sqrt{(P_{x}-R_{x})^2+(P_{y}-R_{y})^2}\\
为了保证1和2中的d为负时不会导致公式3的结果变大:\\
\to d=\sqrt{max(P_{x}-R_{x},0)^2+max(P_{y}-R_{y},0)^2}\\
\\
length(max(abs(P)-R,0))
\end{array}
}[/math]
float sdBox(vec3 P,vec3 R)
{
q=abs(P)-R;
d=length(max(q,0))+min(max(q.x,max(q.y,q.z)),0); //为了保证矩形内部坐标的d能为负值而加入min函数
return d;
}