Opengl:为世界地图着色?

时间:2017-02-13 18:46:55

标签: opengl graphics gis

这是每个GIS应用程序都可以执行的任务:给定一些多边形,用选定的颜色填充每个多边形。像这样:image

在Opengl中反复执行此操作的最佳方法是什么?也就是说,多边形不会改变,我想改变着色数据以产生差异渲染。

为每次渲染重新绘制多边形是最直接的解决方案,但这似乎是一种浪费,因为几何图形根本不会发生变化。

或者为每个多边形创建模板更好,并且模板打印整个地图?如果有太多的多边形,会有数百或数千个渲染过程会产生问题吗?

2 个答案:

答案 0 :(得分:0)

对于多边形的每个顶点,映射一定的颜色。这意味着当您将数据发送到着色器时,每次调用顶点数组对象都会发送2个参数:顶点着色器中需要的向量和向量将被用作片段颜色。这是最简单的方法。

例如,想一下在opengl中绘制的三角形。如果您将顶点发送到顶点着色器并在每次顶点进入着色器管道时在片段着色器中设置颜色,则它将相应地定位并使用片段着色器中给定颜色的屏幕设置。

我很难解释的技术(我不是解释中最好的),用于颜色插值的彩色三角形示例。红色maped到角落,绿色maped到另一个,蓝色到最后。如果你设置它,红色映射到每个角落你得到你的彩色三角形。这是基本原则。哦,你绘制三角形的最小数量,你需要一对着色器。 注意:多边形由N个三角形组成,您需要将相同的颜色映射到该多边形中绘制的每个三角形的每个顶点。

答案 1 :(得分:0)

我认为更大的问题是OpenGL一般不支持多边形或矢量绘图,但是有一些库。您必须使用现有的矢量绘图解决方案,否则,您必须将GIS数据(通常是多边形的点列表)转换为三角形。这可能是最大的障碍。

几何不变的事实并不是真正的问题,你通常会将几何存储到一个或多个缓冲区中,然后创建逻辑以仅绘制在视点区域内可见的内容,甚至可以到目前为止仅生成可见区域的几何体。

另见这个问题及其答案。

Rendering Vector Graphics in OpenGL?