【发布时间】:2016-10-31 13:56:27
【问题描述】:
在着色器模型 3.0 中,我很确定这是一个否,但我还是想问这个问题,
在着色器模型 5.0 中,您可以在顶点着色器中对纹理进行采样吗?
如果我想为每个顶点提供大量补充信息,我有哪些选择?
编辑: 显然 可以像 here 那样进行顶点纹理提取,但是当我在我的 hlsl 着色器模型 5 程序中尝试它时,我得到了错误
错误 X4532:无法将表达式映射到 vs_5_0 指令集
【问题讨论】:
标签: hlsl direct3d11
在着色器模型 3.0 中,我很确定这是一个否,但我还是想问这个问题,
在着色器模型 5.0 中,您可以在顶点着色器中对纹理进行采样吗?
如果我想为每个顶点提供大量补充信息,我有哪些选择?
编辑: 显然 可以像 here 那样进行顶点纹理提取,但是当我在我的 hlsl 着色器模型 5 程序中尝试它时,我得到了错误
错误 X4532:无法将表达式映射到 vs_5_0 指令集
【问题讨论】:
标签: hlsl direct3d11
是的,在 Shader Model 5.0 中很容易从顶点着色器中采样纹理,在任何 Texture2D 对象上使用 operator[ unint2 ]。
例如,tex0 是着色器模型 5 hlsl 程序中的 Texture2D 对象:
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
【讨论】: