你能看一下顶点着色器中的纹理样本吗?

时间:2011-12-15 03:16:08

标签: hlsl direct3d11

在着色器模型3.0中,我很确定这是 no ,但无论如何我想问这个,

在着色器模型5.0中,您可以在顶点着色器中对纹理进行采样吗?

如果我想在每个顶点提供大量补充信息,我有哪些选择?

编辑: 显然它 可以像完成here那样进行顶点纹理提取,但是当我在我的hlsl着色器模型5程序中尝试它时,我得到了错误

错误X4532:无法将表达式映射到vs_5_0指令集

2 个答案:

答案 0 :(得分:3)

是的,在Shader Model 5.0中使用operator[ unint2 ]在任何Texture2D对象上轻松完成从顶点着色器中采样纹理。

例如,tex0是着色器模型5 hlsl程序中的Texture2D对象:

Texture2D tex0 : register( t0 );

// in a vertex shader program
uint2 pos_xy = { 0, 1 } ;
texelColor = tex0[ pos_xy ] ;

答案 1 :(得分:0)

是,但您必须使用SampleLevel进行抽样。您还可以使用mytexture[xy_coord]texture.Load(...)直接从纹理加载值,而SampleLevelSample提供的值不会采样' (例如双线性插值)。

您可以使用SampleLevel函数在顶点着色器中对纹理进行采样,您还必须在其中指定要采样的mip-mapping级别。您可以想象for函数在内部使用s = """I like to run. Running is fun. The end.""" rev = "\n".join(' '.join(sb[::-1] for sb in sub.split(' ')) for sub in s.split('\n')) 函数,还有一个额外的好处,即通过在屏幕空间中获取纹理坐标查找的局部导数来自动为您选择mip映射级别(此允许GPU选择要使用的mip级别。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb509699(v=vs.85).aspx