着色器中的高度图不起作用

3
我正在尝试实现基于GPU的几何剪裁映射,并且在将一个简单的高度图应用到我的地形时遇到了问题。对于高度图,我使用了一个表面格式为“single”的简单纹理。我从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

忘记了纹理坐标是以纹素为单位的,所以将其乘以纹素就解决了问题。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接