全站通知:

SDF正方形公式

阅读

    

2024-04-04更新

    

最新编辑:glamcurrent

阅读:

  

更新日期:2024-04-04

  

最新编辑:glamcurrent

来自falcon bmsWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
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;
}