片段着色器 - 画一条线?

Ste*_*fan 5 opengl glsl fragment-shader

我对如何使用片段着色器绘制具有特定宽度(或多行)的线感兴趣.我偶然发现这篇文章似乎在解释它.

我所面临的挑战是理解它背后的逻辑.

几个问题:

  1. 我在这个例子中的坐标空间是(0.0-1.0,0.0-1.0),对吗?
  2. 如果是这样,"uv"变量的目的是什么.由于厚度为500,"uv"变量将非常小.因此从它到pont 1和2的距离(存储在a和b变量中)?
  3. 最后,h变量背后的逻辑是什么?

Pav*_*liy 2

我将尝试一一回答您的所有问题:

1)是的,这实际上是正确的。

2) 在 3D 计算机图形学中,通常使用 0 到 1(或 -1 到 1)之间的浮点值来表示坐标(在一定边界内)。首先,这使得判断给定值是否跨越所述边界变得非常容易,并且抽象出了“像素”作为离散图像单元的概念;此外,这种常见做法几乎可以在其他任何地方找到(考虑设备坐标或纹理坐标)

不要担心您正在使用的值小于 1;事实上,在计算机图形学中,您通常处理浮点算术,并且 FLOAT 类型非常擅长表达“1”点周围的实数值线。

3) h 的公式由 2 部分组成:平方根部分和 2/c 系数。平方根部分在学校数学课上应该是众所周知的——这是三角形面积(a、b、c 之间)的 Heron 公式。2/c 提取所述三角形的高度,该高度存储在 h 中,也是点 uv 与三角形“地线”之间的距离。然后使用该距离来确定 uv 相对于线 p1-p2 的位置。