zoukankan      html  css  js  c++  java
  • 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个顶点进渲染管线,然后在纹理空间对图像做处理了。可以实现很多的效果。

  • 相关阅读:
    python 如何把在字符串里面的名字变成变量,进行复制
    2017-05-30 英语
    RYU 中如钩构建TCP数据包,设置ACK等标志
    Arch linux LXR 安装过程
    ubuntu如何配置lxr
    2017-05-27 英语
    Emacs学习笔记:移动
    9.特殊矩阵的压缩存储
    13.链路层设备
    9.CSMA_CD协议
  • 原文地址:https://www.cnblogs.com/lancidie/p/2137951.html
Copyright © 2011-2022 走看看