首页 > 解决方案 > 在顶点着色器novadays中使用纹理的方法是什么?

问题描述

在顶点着色器novadays中使用纹理的方法是什么?

我将旧的 xna 示例移植到 monogame,但无法找到某个技巧的实际解决方案。

sampler2D 在 VertexShaderFunction 寄存器索引超出时不起作用,目标不支持采样器

据我了解,作者使用纹理颜色来设置高度或方向

~

texture FlowMapTexture : register(t0);
sampler2D FlowMapSampler : register(s0) = sampler_state
{
    Texture = <FlowMapTexture>;
};

~

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{

~

    float2 texCoord = (worldPosition.xz + WorldToFlowMapTexCoord.xy) * WorldToFlowMapTexCoord.zw;
    float2 flowVector = tex2Dlod(FlowMapSampler, float4(texCoord, 0, 0)).rg;

    worldPosition.xz -= flowVector * SquareSize * extendAmount;
    float4 viewPosition = mul(worldPosition, View);
    output.Position = mul(viewPosition, Projection);
    output.Color = input.Color;

    return output;
}

标签: xnashadermonogamehlsl

解决方案


我自己找的//

我使用 Shader Model 4,但具有 9_1 级功能集,该功能集旨在在不支持“真正”功能级别 4.0 的旧卡或嵌入式设备(主要是手机)上使用 Direct3D11 API。

因此,即使您可以使用 Shader Model 4 语法,您的着色器仍然需要符合硬件功能(对于级别 9.1 来说是 ps2.0)。

在此处查看有关功能级别的 msdn 博客

我只是使用 (/4_0) 编译器选项。


推荐阅读