使用Directx11在基于高度图的地形上的孔

时间:2012-09-06 16:54:33

标签: c++ directx-11 terrain heightmap

我目前正在研究由高度图生成的圆柱形地形。 在程序中发生的事情是简单的,有一个地形颜色的纹理,具有区域的alpha值,我希望它是不可见的,另一个纹理ARGB,A是灰度,高度和RGB是光的正常。 纹理使得A值从1到255并且我为具有孔的区域保留0,这意味着我不希望存在。 所以在理论上没有问题,我根据第一个纹理使这些区域不可见但是在实践中发生的事情是程序正在考虑将0作为最小高度,即使纹理在顶部,也会为此创建一些线条0的区域,就像试图制作它的三角形但没有到达那里,因为我通过使其不可见来切割下一个顶点。 Notice the lines going to the center of the cylinder This is how it gets when i stop making those vertex invisible

注意到达圆柱体中心的线条 当我停止使这些顶点不可见时,这就是它的结果

所以,就是说,我在像素着色器上使用了Clip()函数使其不可见。

基本上我需要帮助: 是否有可能,就像我在像素着色器上使用clip()一样,我在顶点着色器上执行类似的操作并摆脱不需要的顶点? 基本上,可以说只是忽略值0? 有什么想法解决这个问题?我想要使​​所有0的顶点成为他的邻居的值,这样那些线不会到达中心,而是与圆柱本身在同一平面上。 另一件事是我们可以看到程序正在将值从一个顶点插值到下一个顶点,这就是我在不可见顶点中途切入的原因

我正在使用带有C ++的Directx11 API,该程序使用Tessellation。

感谢您抽出宝贵时间,对此有任何意见,我将非常高兴!

1 个答案:

答案 0 :(得分:0)

我确实解决了这个问题。 我使高度值的纹理通过一个修饰符,该修饰符创建了另一个纹理,零值由侧像素替换,值不同于零或更改为128.0f。 因此,它使奇怪的线条方向更准确,不会到达圆柱体的中心,而是沿着线条。