2013-03-28 37 views
1

我正在尝试将纹理图像应用于正交平面,以便它可以用作'U.I.装饰'。如何使用DirectX11着色器将纹理应用于正交平面

飞机由D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP格式的两个tri组成。当我尝试使用着色器渲染飞机时,它会以白色显示(或者如果我将混合状态设置为true,则显示为不可见)。我相信这是因为我只在正交平面上对纹理的四个角进行采样,因为我只是在顶点着色器中进行采样。

这是我的着色器当前代码:

void VSMain(const VSInput input, out PSInput output) { 
    output.pos = input.pos; 
    output.pos = mul(output.pos, g_WVP); 

    float2 tex_pos; 
    float4 Tex; 
    tex_pos.x = (input.pos.x + 512)/1024; 
    tex_pos.y = (-input.pos.z + 512)/1024; 

    Tex = g_materialMap.SampleLevel(g_sampler, tex_pos, 0); 

    output.colour = Tex; 
} 

void PSMain(const PSInput input, out PSOutput output) { 
    output.colour = input.colour; 
} 

当我将此着色器我目前渲染场景中的高度图,它工作正常,但它不能正常工作,上正交平面。

任何人都可以帮助我正确地将这种纹理应用到正交平面吗? (如果需要,我可以提供当前场景的截图)

+0

你能提供您创建顶点和绘制代码?截图也会很有趣:) – Gnietschow

回答

1

我发现并解决了问题。

抽样需要在像素着色器中完成,以使其着色正确,但我错过了将像素着色器可见的纹理添加。

的修补程序如下:

开关线路

Tex = g_materialMap.SampleLevel(g_sampler, tex_pos, 0); 

output.tex = tex_pos; 

然后,在像素着色器只是把

float4 Tex = g_materialMap.Sample(g_sampler, input.tex); 
output.colour = Tex; 
相关问题