繁体   English   中英

Directx:基于HLSL纹理的高度图。 (着色器5.0)

[英]Directx: HLSL Texture based height map. (Shader 5.0)

我正在尝试以我知道的最简单(最快)的方式来实现基于GPU的高度图。 我将(.png, D3DX11CreateShaderResourceViewFromFile() )纹理传递到着色器中,并且尝试将其采样为当前像素值。 看到float4 ,我当前正在从通道分配颜色值以补偿y值。

Texture2D colorMap : register(t0);
SamplerState colorSampler : register(s0);

...

VOut VShader(float4 position : POSITION, float2 Texture : TEXCOORD0, float3 Normal : NORMAL)
{
    VOut output;

    float4 colors = colorMap.SampleLevel(colorSampler, float4(position.x*0.001, position.z*0.001, 0,0 ),0);
    position.y = colors.x*128;

    output.position = mul(position, WVP);
    output.texture0 = Texture;
    output.normal = Normal;

    return output;
}

纹理已正确导入,并且我插入了另一个纹理,并能够成功地将纹理与另一个纹理混合(通过值的乘积),因此我知道float4结构包含能够对其执行算术运算的值。

在顶点函数中,尝试提取值在网格上不会产生任何结果: 在此处输入图片说明

这个概念在纸面上似乎很简单。

由于您使用的是Texture2D,因此Location参数必须为float2。

此外,请确保位置从(0,0)变为(1,1)。 为了使映射正确,网格需要放置在(0,0,0)到(1000,0,1000)之间。

如果是这种情况,那么它应该起作用:

SampleLevel(colorSampler, position.xz*0.001 ,0);

编辑

我很好奇您如何对此进行测试。 我尝试编译您的代码,并添加了VOut和WVP的定义,但失败了。 错误之一是该位置参数为float4,应为float2。 我得到的另一个错误是函数的名称。 它应该是主要的。

如果您恰好使用Visual Studio,我强烈建议您使用图形调试工具并检查所有变量。 我怀疑colorMap纹理可能绑定到像素着色器,但不绑定到顶点着色器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM