簡體   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