多级B样条的细节水平表面

时间:2013-08-09 21:12:07

标签: opengl graphics geometry

我最近阅读了论文Scattered Data Interpolation with Multilevel B-Splines

考虑表面z(x,y),xmin< = x< = xmax,ymin< = y< = ymax。接下来考虑一个4x4网格的“控制”点(黑色):P0,使表面覆盖中央单元格:

enter image description here

表面上任何点(红色)的z值(黄色)可以近似为控制点中值的加权和。权重是到控制点的距离。

接下来将中心细胞分成2x2细胞,并在表面周围添加1个细胞边界。结果是控制网格P1(蓝色)。通过将P1中4x4最近控制点的距离加权和与上面的初始近似相加,可以找到红点中z值的更精确近似值。

同样,我们可以重复一半大小的单元格并创建新的控制网格:P2,P3,... Pn。每个网格都是一个新的“级别”。

每个新网格都会向表面添加更多细节。控制网格变得越来越稀疏;  这些值仅相差0,表面相对于其环绕点突然变化。

结果是可能的存储方案应该能够以相对较少的内存存储具有大量细节的表面。

如何在细节级别算法中使用它?

对于表面的每个LOD图块,我想使用GPU上的控制点(最好使用OpenGL)进行三角测量,水平由图块距离相机的距离确定。

希望如此;一个令人难以置信的细节表面可以使用最少的内存存储,并从不同的角度查看,并快速放大/缩小。

有关如何执行此操作的任何想法或指示?

2 个答案:

答案 0 :(得分:1)

您正在寻找依赖于视图的LOD选择因子,LOD上的David Luebke book描述了几种技术。

您使用的算法是渐进式,任何适用于经典技术的LOD Progressive meshes适用于您。

请注意,如果您使用此渐进重建算法进行纹理映射而不是网格,则您将获得与Perlin noise完全相同的过滤情况。

答案 1 :(得分:1)

OpenGL 4.0及更高版本,支持Geometry Shaders。它们可用于动态生成tessellate基元。因此,您将平铺和控制点信息信息传递到着色器,您将在其中进一步细分原始图形。