全站通知:

SDF直线公式

阅读

    

2024-04-02更新

    

最新编辑:glamcurrent

阅读:

  

更新日期:2024-04-02

  

最新编辑:glamcurrent

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