【问题标题】:What the way to use texture in vertex shader novadays?在顶点着色器novadays中使用纹理的方法是什么?
【发布时间】:2023-04-30 20:13:01
【问题描述】:

在顶点着色器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;
}

【问题讨论】:

    标签: xna shader monogame hlsl


    【解决方案1】:

    我自己找到的//

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

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

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

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

    【讨论】: