我有以下问题(还没有代码):
我们有一个4000 x 256的16位分辨率的数据集,我需要编写一个程序来显示这些数据。我想使用DirectX或OpenGL来做这件事,但是我不知道正确的方法是什么。
我是创建一个4000x256个三角形的缓冲区,分辨率是y轴,还是继续创建一个四边形,然后使用镶嵌来操作数据?
什么时候我会在镶嵌上使用一个大的顶点缓冲区,反之亦然?
发布于 2013-09-30 01:27:48
这真的取决于很多因素。你想渲染一个大约一百万个像素\顶点的贴图。根据您的硬件,这可以通过最直接的技术来实现。
在我的脑海中,我能想到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/
https://stackoverflow.com/questions/17359098
复制相似问题