DX10 天空盒着色器

发布于 2024-10-15 18:51:52 字数 1638 浏览 1 评论 0原文

我正在尝试使用以下 HLSL 代码在 DX10 中编写天空盒着色器:

//////////////////////////////////////////////////////////////////////////
// world matrix for each rendered object
float4x4 g_mWorld;

// single cubemap texture
Texture2D g_tCubeMap;

// basic mirror texture sampler
SamplerState g_sSamplerMirror
{
    Filter = MIN_MAG_MIP_POINT;
    AddressU = MIRROR;
    AddressV = MIRROR;
};

//////////////////////////////////////////////////////////////////////////
// pre-defined vertex formats for vertex input layouts
struct VS_INPUT
{
    float3 Position     : POSITION;
};

struct PS_INPUT
{
    float4 SPosition    : SV_POSITION;
    float3 UV           : TEXCOORD;
};

//////////////////////////////////////////////////////////////////////////
PS_INPUT VS_Default( VS_INPUT Input )
{
    PS_INPUT Output = (PS_INPUT)0;

    Output.SPosition = float4(Input.Position,1.0f);
    Output.UV = normalize( mul( Output.SPosition, g_mWorld ) ).xyz;

    return Output;
}

//////////////////////////////////////////////////////////////////////////
float4 PS_Default( PS_INPUT Input ) : SV_TARGET0
{
    return float4( texCUBE( g_sSamplerMirror, Input.UV ) );
}

//////////////////////////////////////////////////////////////////////////
technique10 TECH_Default
{
    pass
    {
        SetVertexShader( CompileShader( vs_4_0, VS_Default() ) );
        SetPixelShader( CompileShader( ps_4_0, PS_Default() ) );
        SetGeometryShader( 0 );
    }
}

这会给出错误“不在 dx9 兼容模式下时禁用 DX-9 样式内在函数”。第 46 行:

return float4( texCUBE( g_sSamplerMirror, Input.UV ) );

有 texCUBE 的替代品吗?如何在不启用 dx9 兼容模式的情况下解决此问题?

I'm trying to write a skybox shader in DX10 using the following HLSL code:

//////////////////////////////////////////////////////////////////////////
// world matrix for each rendered object
float4x4 g_mWorld;

// single cubemap texture
Texture2D g_tCubeMap;

// basic mirror texture sampler
SamplerState g_sSamplerMirror
{
    Filter = MIN_MAG_MIP_POINT;
    AddressU = MIRROR;
    AddressV = MIRROR;
};

//////////////////////////////////////////////////////////////////////////
// pre-defined vertex formats for vertex input layouts
struct VS_INPUT
{
    float3 Position     : POSITION;
};

struct PS_INPUT
{
    float4 SPosition    : SV_POSITION;
    float3 UV           : TEXCOORD;
};

//////////////////////////////////////////////////////////////////////////
PS_INPUT VS_Default( VS_INPUT Input )
{
    PS_INPUT Output = (PS_INPUT)0;

    Output.SPosition = float4(Input.Position,1.0f);
    Output.UV = normalize( mul( Output.SPosition, g_mWorld ) ).xyz;

    return Output;
}

//////////////////////////////////////////////////////////////////////////
float4 PS_Default( PS_INPUT Input ) : SV_TARGET0
{
    return float4( texCUBE( g_sSamplerMirror, Input.UV ) );
}

//////////////////////////////////////////////////////////////////////////
technique10 TECH_Default
{
    pass
    {
        SetVertexShader( CompileShader( vs_4_0, VS_Default() ) );
        SetPixelShader( CompileShader( ps_4_0, PS_Default() ) );
        SetGeometryShader( 0 );
    }
}

Which gives the error "DX-9 style intrinsics are disabled when not in dx9 compatibility mode." on line 46:

return float4( texCUBE( g_sSamplerMirror, Input.UV ) );

Is there an alternative to texCUBE? How can I fix this without enabling dx9 compatibility mode?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

歌枕肩 2024-10-22 18:51:52

由于您使用的是 Shader Model 4您应该能够创建 一个 TextureCube 对象,然后 调用示例方法

Since you are using Shader Model 4 you should be able to create a TextureCube object and then call the Sample method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文