Direct3D 9c中的多渲染目标的用法

DX9c中提供了非常简单的多渲染目标的使用方法。它的原理就是在一次绘制中,将一些不同的信息绘制到许多张纹理中,以便之后对这些纹理进行合成处理,以实现一些不可思议的效果。比如将法线,深度,颜色等信息分别保存到几张纹理中,可以进行关照计算,并且可以实现HDR的效果。D3D9中支持超过4个以上的渲染目标。

具体步骤十分简单。

假设我们已经创建了几张RenderTarget的纹理。pTexDepth, pTexColor, pTexNormal;

在C++中

pTexDepth->GetSurfaceLevel( 0, &pSurfDepth); // 得到深度纹理的Surface

pDevice->SetRenderTarget( 0, pSurfDepth );// 设置该Surface为渲染目标0

pTexColor->GetSurfaceLevel( 0, &pSurfColor);// 得到色彩纹理的Surface

pDevice->SetRenderTarget( 1, pSurfColor );// 设置该Surface为渲染目标1

pTexNormal->GetSurfaceLevel( 0, &pSurfNormal);// 得到法线纹理的Surface

pDevice->SetRenderTarget( 2, pSurfNormal );//设置该Surface为渲染目标2

在Effect中:

定义PS_OUT struct

{

    Position: POSITION;

    Tex:    TEXCOORD0;

    Norm: TEXCOORD1;

    rt0:   COLOR0;

    rt1:    COLOR1;

    rt2:    COLOR2;

};

然后PS中

PS_OUT Out = (PS_OUT)0;

...

Out.rt0 = 某个float4;

Out.rt1 = 某个float4;

Out.rt2 = 某个float4;

这样经过渲染之后,我们输入的三张纹理就会各自保存深度,颜色,和法向信息。在之后的渲染中。我们就传和屏幕四角相同位置的4个顶点进渲染管线,然后在纹理空间对图像做处理了。可以实现很多的效果。

原文地址:https://www.cnblogs.com/lancidie/p/2137951.html