2017-01-23 210 views
0

我想用OpenGL ES2.0实现一条线点画(虚线/点线),并找到了关于此主题的许多线索。但没有任何例子。有人以前做过这件事,可以帮我实施吗?用OpenGL ES绘制点线

回答

1

有用于在OpenGL ES点画线不直接支持,所以常见的做法是:

  • 渲染多个不同的线段,每个段呈现点画图案的一个整体部分。
  • 渲染由两个三角形组成的薄四边形,并使用透明纹理应用线条纹效果。

从性能的角度来看,如果屏幕上有很多行,我会推荐后者。

+0

我认为后者还可以更好地控制线条粗细和抗锯齿。 – Columbo

+0

我明白第一个认识,这对我的问题来说非常重和非常困难,因为我有一些不同的元素,比如一个圆圈。但我不明白第二个方法。你有一个例子吗? –

+0

http://korkd.com/2012/02/15/dashed-lines/ –

0

除了solidpixel给出的选项之外,选项三是使用纹理线;一行的片段着色器可以像其他片段着色器一样接收变化和样本纹理。因此,请提供一个纹理坐标作为从x = 0x = k * (length of line)的变化运行,然后对纹理进行采样以生成片段颜色。

渲染一条线时OpenGL上的行为与渲染四条线时的行为不同:对角线上的薄四边形可能会错过片段中心,而线会始终绘制连续的片段集合。

因此,它或多或少地是计算动态点画与预计算并查找它之间的区别。如果你能够像solidpixel一样提倡者计算它,那么它可能会更好,因为它会消耗更少的带宽。

+0

谢谢,这个选项适用于简单的线条。但是当我尝试点两行时(通过传递三个顶点)纹理不起作用,因为它与第一行有关。第二行没有恒定的点画模式。 –

+0

我认为只要每个点的纹理坐标是根据沿该带中所有线的总距离计算出来的,那么就可以了。因此,在生成几何体时保留一个累计总数。 – Tommy