使用OpenGL-ES绘制点画线

我有一个应用程序,绘制三维地图视图标记显示各种功能的行.
我正在将地图移植到OpenGL-ES架构,但在解决如何显示虚线方面遇到了一些麻烦.

做了大量的谷歌搜索,我发现许多参考的想法,绘制虚线和多边形从OpenGL-ES中删除,因为它们可以使用纹理三角形轻松模拟.这很好,但我找不到任何实际进行此仿真和/或描述所涉及步骤的人.

我尝试对这个概念进行原型设计时遇到的一个问题就是一个例子,即当他们走向地平线时,透视会挤压我的线条.使用LINE_STRIP,这不会发生,并且线条在地图中保持恒定的宽度.

关于如何在透视图中实现虚线恒定宽度线的任何建议将非常受欢迎.

最佳答案
我相信你可以将纹理应用于线条,而不仅仅是三角形.您需要为线的每一端设置纹理坐标;纹理将沿线线性插值.

无论您是使用线条还是线条,此解决方案的有效性应该是不变的 – 线条只是创建具有较少顶点的线条的一种方式.

还有另外一个问题:当线离开相机时,纹理图案变得紧凑的趋势.发生这种情况是因为即使对于线条,纹理坐标插值也是透视校正的(参见GL规范的第3.5节).

有两种方法可以解决这个问题:

>如果可以计算纹理的“q”坐标以撤消透视,则可以恢复屏幕空间纹理.这种技术可能性能太高.
>您可以在眼睛空间中投影纹理(例如glTexGen).

纹理坐标生成当然在GLES 1.1中不可用,但如果您按数组使用顶点,则可以通过以下方式伪造它:

>将纹理坐标数组设置为顶点坐标数组和
>使用纹理矩阵“变换”顶点.

这种技术的缺点是纹理图案将位于固定的屏幕空间中 – 也就是说,纹理不会跨越线条.

转载注明原文:使用OpenGL-ES绘制点画线 - 代码日志