![](/img/trans.png)
[英]Is there any DirectX 11 (HLSL 5.0) equivalent to the DirectX 9 texture “string function” syntax?
[英]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.