片段着色器 - 画一条线?

时间:2013-10-21 16:33:40

标签: opengl glsl fragment-shader

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

我所面临的挑战是了解其背后的逻辑。

几个问题:

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

1 个答案:

答案 0 :(得分:2)

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

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

2)在3d计算机图形中常见的是表示坐标(在某些边界内),浮点值介于0和1之间(或介于-1和1之间)。首先,这使得很容易判断给定值是否超过所述边界,并且抽象出“像素”是离散图像单元的概念;此外,这种常见的做法几乎可以在其他任何地方找到(想想设备坐标或纹理坐标)

不要害怕与你合作的价值不到一个;事实上,在计算机图形学中,你通常会处理浮点算术,FLOAT类型非常擅长在“1”点附近表达实数值。

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