在着色器模型3.0中,我很确定这是 no ,但无论如何我想问这个,
在着色器模型5.0中,您可以在顶点着色器中对纹理进行采样吗?
如果我想在每个顶点提供大量补充信息,我有哪些选择?
编辑: 显然它 可以像完成here那样进行顶点纹理提取,但是当我在我的hlsl着色器模型5程序中尝试它时,我得到了错误
错误X4532:无法将表达式映射到vs_5_0指令集
答案 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(...)
直接从纹理加载值,而SampleLevel
或Sample
提供的值不会采样' (例如双线性插值)。
您可以使用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