Shader中的高度图无法正常工作

时间:2012-09-03 07:38:52

标签: hlsl heightmap

我正在尝试实现基于GPU的几何体剪贴图,并且在将简单的高度图应用于我的地形方面存在问题。对于高度图,我使用表面格式为“单”的简单纹理。我从Catalinz's XNA blog获取纹理。

我要做的只是从顶点世界坐标处的纹理获取单个浮点值,并将该值应用于顶点的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是高度贴图纹理的点镜采样器。这是输出,我实际上没有提升:

Screenshot

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

Heightmap

1 个答案:

答案 0 :(得分:0)

忘记纹理坐标是用Texels,所以将它与固定它的纹素相乘。

float elevation = tex2Dlod(HeightmapSampler, float4(worldPos.x*texel, worldPos.z*texel,0,0));