我很难理解下面的代码,想法是在片段着色器中绘制一个简单的片段。我试图分解它但我仍然没有得到???线。 有一个很好的解释会很棒。我在SO或Google上找不到任何东西。
array
原始代码来自TheBookOfShaders.
答案 0 :(得分:2)
假设线由点a
定义,b
和p
是要评估的点,那么pa
是从点{a
开始的向量1}}将p
和ba
中的向量指向a
。{/ p>
现在,b
等于dot(ba, ba)
,length(ba) ^ 2
是向量pa在您的线上的投影。然后,dot(pa,ba) / length(ba)
是在线条长度上标准化的投影。该值夹在0和1之间,因此您的投影将始终位于定义线的点之间。
然后在dot(pa,ba)/dot(ba,ba)
,length(pa - ba * h)
等于ba * h
,这是你的点在线上的投影,现在被夹在点a和b之间。减法dot(pa,ba) / length(ba)
会生成一个向量,表示您的直线与点pa - ba * h
之间的最小距离。使用该矢量的长度并将其与厚度进行比较,您可以确定该点是否落在您想要绘制的线内。