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

  • 相关阅读:
    手游部分测试点
    Selenium-xapth定位
    添加git 忽略文件
    cxfreeze打包python程序的方法说明(生成安装包,实现桌面快捷方式、删除快捷方式)
    使用minidom来处理XML的示例
    ElementTree之Xml文档处理
    cx_freeze打包EXE文件
    wxpython的简单的应用
    python获取文件路径, 文件名, 后缀名
    flask-sqlalchemy
  • 原文地址:https://www.cnblogs.com/lancidie/p/2137951.html
Copyright © 2011-2022 走看看