我目前已经实现了一个OpenGL 3.3 3D环境渲染器渲染(静态)地形块,我的任务是添加统计数据叠加层;根据每个点的数据值在地形上设置特定的像素颜色。
有问题的数据在我的C ++代码库中以黑盒的形式有效提供;我可以输入一对X,Y对双(在世界空间中),它将输出该位置的数据值(地形确实有第三维,但数据并不关心这一点)。有问题的数据是随时间变化的;在改变时间坐标时,场景预计会更新与新坐标对应的数据。
我有第一个实施;显而易见的是,在创建每个顶点时,在黑盒子中查找该位置的相应数据值,并在随附的动态缓冲区中进行编码,随着时间坐标的变化缓冲区更新。这本身就很完美;它的更新速度很快,数据按预期呈现。
然而,它只有每个顶点的数据点,在多边形上进行简单的插值,并且提出了是否可以代替每像素渲染数据的问题。
我正在努力解决这个问题。我无法直接在着色器中实际实现黑盒行为;这是一个庞大而复杂的功能,我不完全了解自己(因此在这里将它表示为一个黑盒子!),它需要引用多个数据源。在我调查项目之前有一个版本 - 在我们(单独的,非OpenGL,2D),自上而下的环境渲染器中以极高的分辨率渲染整个场景,并将其作为纹理应用于网格 - 但这仍然是非常缓慢而且仍然不是真正的每像素数据,你仍然可以缩放到分辨率崩溃的点。
我目前没有使用延迟渲染,但我想知道我是否可以使用类似的原则。我现在正在考虑的一件事是 - 在渲染过程中 - 是否有一种方法可以将每个像素的世界空间X和Y数据存储在缓冲区中(模板?G-?任意渲染目标?),然后 - 返回C ++环境 - 根据累积的X和Y值生成每帧的叠加纹理 - 但我有点想到这需要双精度的概念,而且我所看到的很多内容都暗示了转向GLSL中的双重计算;再次,我担心速度(虽然是一个简单的直通和双精度数据的插值影响较小?)...加上我不完全确定我所建议的甚至是可能的!
我可能会有点过于复杂,但是,可能有更简单的解决方案尚未在我的参考框架中,所以我很想知道是否有更好的解决方案的建议,或者它是否不切实际。 / p>
(虽然我目前正在使用3.3,但需要4+的解决方案并不在桌面之外)