我正在尝试实现基于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
是高度贴图纹理的点镜采样器。这是输出,我实际上没有提升:
这是我正在使用的高度图:
答案 0 :(得分:0)
忘记纹理坐标是用Texels,所以将它与固定它的纹素相乘。
float elevation = tex2Dlod(HeightmapSampler, float4(worldPos.x*texel, worldPos.z*texel,0,0));