SDF直线公式
阅读
2024-04-02更新
最新编辑:glamcurrent
阅读:
更新日期:2024-04-02
最新编辑:glamcurrent
[math]\displaystyle{ \begin{array}{l} 设存在三点:\\ P=(1,0),(此点实际上是随机点)\\ B=(2,2),\\ A=(0,0)\\ 有两个向量: \overrightarrow{PA}=\begin{bmatrix} 1\\ 0 \end{bmatrix}, \overrightarrow{BA}=\begin{bmatrix} 2\\ 2 \end{bmatrix}\\ 则\overrightarrow{PA}在\overrightarrow{BA}上的投影向量\overrightarrow{QA}可写作:\\ \overrightarrow{QA}=\frac{\overrightarrow{PA}\cdot\overrightarrow{BA}}{|\overrightarrow{BA}|}*\frac{\overrightarrow{BA}}{|\overrightarrow{BA}|}=\overrightarrow{BA}*\frac{\overrightarrow{PA}\cdot\overrightarrow{BA}}{|\overrightarrow{BA}|^2} \\ 求垂直于\overrightarrow{BA}向量的向量长度|\overrightarrow{PQ}|可有: \\ 将h=\frac{\overrightarrow{PA}\cdot\overrightarrow{BA}}{|\overrightarrow{BA}|^2} \\有\overrightarrow{QA}=\overrightarrow{BA}*h 则最终:\\ d=|AP-(QA)| \end{array} }[/math]
float Segment(in vec3 p,in vec3 a,in vec3 b)
{
vec3 ap=p-a;
vec3 ab=b-a;
float h=clamp(dot(ap,ab)/dot(ab,ab),0.0,1.0); //clamp的第二、三个函数控制最终显示的线段完整度(0.0,1.0)代表显示完整线段,(0.5,1.0)显示后半部分,(0.0,0.5)为显示前半部分
return length(ap-h*ab); //d=|AP-QA|
}