声学数据的高度图

时间:2013-06-28 07:04:57

标签: c++ opengl directx

我遇到以下问题(尚无代码):

我们有一个4000 x 256的数据集,16位分辨率,我需要编写一个程序来显示这些数据。 我想使用DirectX或OpenGL这样做,但我不知道正确的方法是什么。

我是否创建了一个4000 x 256三角形的缓冲区,分辨率为y轴,或者我会继续创建一个四边形,然后使用tesselation来操纵数据?

我什么时候会使用大的顶点缓冲区而不是tesselation,反之亦然?

1 个答案:

答案 0 :(得分:2)

这实际上取决于很多因素。 您想要渲染大约1百万像素\顶点的地图。根据您的硬件,这可以通过最直接的技术来实现。

我可以想到3种技巧:

1)创建一个4000x256顶点的网格,并根据数据的高度图图像设置它们的高度。 您在创建时设置一次数据。着色器将仅绘制静态缓冲区并将单个变换矩阵(world \ view \ projection)应用于所有顶点。

2)创建一个高度为0的4000x256顶点网格,并通过采样高度贴图数据翻译顶​​点着色器内每个顶点的高度。

3)与2)相同,只有你添加曲面细分阶段。

进行细分的优点是可以使用较小的顶点缓冲区,并且可以在运行时动态细分。 这意味着您可以使网格的一部分更加细分,更少细分。例如,您可能希望仅在用户查看网格的位置进行更多细分。

顺便说一句,你不能将一个四边形镶嵌到一百万个四边形中,一个四边形可以镶嵌多少。但是你可以对它进行大量细分,无论如何你都会获得几个减小网格尺寸的因素。

如果你从未使用过DirectX或OpenGL,我会选择1.看看它是否足够快,只有当它不够快时,请选择2,最后转到3。

事实上,您了解3D图形渲染背后的理论并不意味着您可以轻松学习DirectX或OpenGL。它们很难理解和学习,因为它们作为API非常复杂。

如果你想要,你可以看看我使用DirectX11做的一些细分:

http://pompidev.net/2012/09/25/tessellation-simplified/

http://pompidev.net/2012/09/29/tessellation-update/