Graphics 用opengles进行线点画

Graphics 用opengles进行线点画,graphics,opengl-es,opengl-es-2.0,Graphics,Opengl Es,Opengl Es 2.0,我正在尝试用OpenGL ES2.0实现一个线点画(虚线/虚线),并找到了许多关于这个主题的线索。但没有任何例子。以前有人这样做过吗?可以帮助我实现吗?OpenGL ES中不直接支持点画线,因此常用的方法是: 渲染多条不同的线段,每条线段渲染点画图案的一个实体部分 渲染由两个三角形组成的薄四边形,并使用透明纹理应用线点画效果 从性能角度来看,如果屏幕上有大量线条,我建议使用后者。除了solidpixel给出的选项外,选项三是使用纹理线条;直线的片段着色器可以像任何其他片段着色器一样接收变化和

我正在尝试用OpenGL ES2.0实现一个线点画(虚线/虚线),并找到了许多关于这个主题的线索。但没有任何例子。以前有人这样做过吗?可以帮助我实现吗?

OpenGL ES中不直接支持点画线,因此常用的方法是:

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

从性能角度来看,如果屏幕上有大量线条,我建议使用后者。

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

在OpenGL上渲染直线时的行为与渲染四边形时的行为不同:对角线上的薄四边形可能会丢失片段中心,而直线将始终绘制连续的片段集合


因此,这或多或少是动态计算点画与预先计算点画并查找点画之间的区别。如果你能像solidpixel所提倡的那样边走边计算,那可能更可取,因为它会消耗更少的带宽。

我认为后者也能让你更好地控制线的厚度和抗锯齿。我理解第一种方法,这对我的问题来说是非常数学化和非常困难的,因为我有一些不同的元素,比如圆。但我不明白第二种方法。你有一个例子吗?谢谢,这个选项适用于简单的行。但是当我尝试点画两条线(通过传递三个位置顶点)时,纹理不起作用,因为它与第一条线相关。第二条线没有固定的点画图案。我认为只要每个点的纹理坐标是从条带中所有线到该点的总距离计算出来的,就可以了。因此,在生成几何体时,请保留累计总数。