gpt4 book ai didi

c++ - 如何使用 DirectX11 着色器将纹理应用到正交平面

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:17 25 4
gpt4 key购买 nike

我目前正在尝试将纹理图像应用于正交平面,以便它可以用作一种“U.I.装饰”。

平面由 D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP 格式的两个三角形组成。当我尝试使用着色器渲染平面时,它只是显示为白色(如果我将混合状态设置为 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;
}

当我将此着色器应用于场景中当前渲染的高度图时,它可以正常工作,但在正交平面上无法正常工作。

谁能帮我把这个纹理正确地应用到正交平面上? (如果需要,我可以提供当前场景的截图)

最佳答案

我自己发现并解决了这个问题。

采样确实需要在像素着色器中完成才能正确着色,但我错过了添加纹理以使其对像素着色器可见。

修复如下:

换行

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;

关于c++ - 如何使用 DirectX11 着色器将纹理应用到正交平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com