DirectX11 Effect特效文件

本文详细介绍了DirectX11中的Effect文件,包括其概念、组成、加载方式、技术与pass过程的创建,以及如何在C++代码中与Effect文件交互,通过实例展示了如何实现颜色反转特效。
摘要由CSDN通过智能技术生成

Effect特效文件

1. 什么是Effect特效文件?

Direct3D 中,有个 Effect 文件的概念。将所创建的着色器与这些文件捆绑在一起就是所谓的一个效果(特效)。 大多数时候,你只是结合顶点和像素着色器来创建某一行为,这叫做技术(technique)。一种技术定义了一个渲染效果,而 Effect文件就是包含很多渲染技术的文件。
例如:

technique11 ColorInversion
{
    pass P0
    {
        SetVertexShader( CompileShader( vs_5_0, VS_Main() ) );
        SetGeometryShader( NULL );
        SetPixelShader( CompileShader( ps_5_0, PS_Main() ) );
    }
}

每个效果文件都包含一个特定的渲染功能集。 每个效果,都可以在你绘制场景中的物体时应用,来指示物体绘制的外观和怎样绘制。 例如,你可以创建一个效果专用于贴图对象,或者创建一个效果用于产生明亮的光照或模糊的光照。 对于同一个效果也可以有不同的版本, 根据机器性能不同,将某些效果用于低端机器,而另一些用于高端机器。 在使用效果时,它们有着十分广泛的用途。
当然可以在 Direct3D 11 中一直单独的使用着色器,但是你会发现当将这些单独的着色器放在一起作为一个Effect使用时,会变得十分有用。 一个效果是以一种特别的方式将所需的着色器简单的放在一起打包来渲染对象。 效果作为一个单独的对象载入,并且只包含那些必须用到的着色器。通过在你的场景中改变效果文件,你就能够很容易改变 Direct3D 的渲染方式。 效果定义在效果文件之中,以文本格式从磁盘中载入,编译和执行。
效果文件和我们之前使用的着色器文件不同之处在于,Effect文件不仅仅包含着色器,还有诸如渲染状态,混合状态等内容。

2. Effect特效文件的组成(布局)

Effect效果文件由几个不同的部分组成:

  • 外部变量(External Variables)——这些变量的数据来自于程序的调用。例如:

    Texture2D colorMap : register( t0 );
    SamplerState colorSampler : register( s0 );
    cbuffer cbChangesEveryFrame : register( b0 )
    {
        matrix worldMatrix;
    };
    cbuffer cbNeverChanges : register( b1 )
    {
        matrix viewMatrix;
    };
    cbuffer cbChangeOnResize : register( b2 )
    {
        matrix projMatrix;
    };
  • 输入结构(Input structures)——定义着色器之间传递信息的结构。例如:

    struct VS_Input
    {
        float4 pos  : POSITION;
        float2 tex0 : TEXCOORD0;
    };
    struct PS_Input
    {
        float4 pos  : SV_POSITION;
        float2 tex0 : TEXCOORD0;
    };
  • 着色器(Shaders)——着色器代码(一个效果文件可以包含多个着色器)。例如:

    PS_Input VS_Main( VS_Input vertex )
    {
        PS_Input vsOut = ( PS_Input )0;
        vsOut.pos = mul( vertex.pos, worldMatrix );
        vsOut.pos = mul( vsOut.pos, viewMatrix );
        vsOut.pos = mul( vsOut.pos, projMatrix );
        vsOut.tex<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值