在着色器模型 3.0 中,我很确定这是否定的,但我还是想问这个,
在着色器模型 5.0 中,您可以在顶点着色器中对纹理进行采样吗?
如果我想为每个顶点提供大量补充信息,我有什么选择?
编辑:显然可以进行顶点纹理提取,如此处,但是当我在我的 hlsl 着色器模型 5 程序中尝试它时,我得到了错误
错误 X4532:无法将表达式映射到 vs_5_0 指令集
在着色器模型 3.0 中,我很确定这是否定的,但我还是想问这个,
在着色器模型 5.0 中,您可以在顶点着色器中对纹理进行采样吗?
如果我想为每个顶点提供大量补充信息,我有什么选择?
编辑:显然可以进行顶点纹理提取,如此处,但是当我在我的 hlsl 着色器模型 5 程序中尝试它时,我得到了错误
错误 X4532:无法将表达式映射到 vs_5_0 指令集
是的,在 Shader Model 5.0 中很容易从顶点着色器中采样纹理,在任何对象上使用operator[unint2] 。Texture2D
例如,tex0
是Texture2D
着色器模型 5 hlsl 程序中的对象:
Texture2D tex0 : register( t0 );
// in a vertex shader program
uint2 pos_xy = { 0, 1 } ;
texelColor = tex0[ pos_xy ] ;
是的,但您必须使用SampleLevel
采样。您也可以直接从纹理加载值,使用mytexture[xy_coord]
或texture.Load(...)
提供没有“采样”的值(例如双线性插值)。
您可以使用该函数在顶点着色器中对纹理进行采样SampleLevel
,您还必须在其中指定要采样的 mip 映射级别。您可以想象该Sample
函数在内部使用该SampleLevel
函数,另外还有一个好处是,通过在屏幕空间中获取纹理坐标查找的局部导数,自动为您选择 mip 映射级别(这允许 GPU 选择要使用的 mip 级别)。
https://msdn.microsoft.com/en-us/library/windows/desktop/bb509699(v=vs.85).aspx