3

我正在尝试实现基于 GPU 的几何剪辑映射,但在将简单的高度图应用于我的地形时遇到了问题。对于高度图,我使用表面格式为“单一”的简单纹理。我从Catalinz 的 XNA 博客中获取了纹理。

我要做的只是从顶点世界坐标的纹理中获取单个浮点值,并将该值应用于顶点的 Y 值。我通过着色器应用高度图,因为没有可以应用的固定网格代码。到目前为止我尝试过的是使用该tex2Dlod函数,但似乎没有输出或输出为 0。Direct X 顶点着色器的代码如下所示:

float4 worldPos = mul(float4(pos.x,0.0f,pos.y, 1.0f), worldMatrix);
float elevation = tex2Dlod(HeightmapSampler, float4(worldPos.x, worldPos.z,0,0));
worldPos.y = elevation * 128;

HeightmapSampler高度图纹理的点镜采样器在哪里。这是输出,我实际上没有得到任何高度:

截屏

这是我正在使用的高度图:

高度图

4

1 回答 1

0

忘记了纹理坐标在纹素中,所以将它与纹素相乘来修复它。

float elevation = tex2Dlod(HeightmapSampler, float4(worldPos.x*texel, worldPos.z*texel,0,0));
于 2012-09-03T12:39:08.437 回答