渲染目标的实际应用:Flat

      从实质上说,Flat是一个四边形,由两个三角形组成。将指定目标的渲染效果贴在Flat上,可实现很多种效果。本文实现的是在水底往上看的效果:把贴在水面上的纹理贴在该四边形上。

      先看Flat类定义:

       struct flat2D
      {
            float4 position;
            float2 uv;        
      };

 

       class Flat : public RenderObject
      {


          public:
               Flat(float2 pos,float2 size);
               void _Render();
               void  RendWire(){};
                ~Flat(void);


          private:
               float2 m_size;
               float2 m_position;
               LPDIRECT3DVERTEXBUFFER9 m_pVB;
               LPDIRECT3DINDEXBUFFER9  m_pIB;
       };

       应该不难理解,关于RenderObject的实现请看引擎技术研究之渲染到目标,RendWire()在Flat没意思,纯属是实例化纯虚函数而已

       在构造函数里用四个顶点构成一个四边形,_Render()实现如下:

        if(NULL!=m_pMeshTextures)
        {
            m_pShader->SetTexture("ColorMap",m_pMeshTextures[0]);
            m_pShader->CommitChanges();
         }
        D3Dsystem::GetInstance()->GetDevice()->SetStreamSource( 0, m_pVB, 0, sizeof(flat2D) );
        D3Dsystem::GetInstance()->GetDevice()->SetIndices(m_pIB);
        D3Dsystem::GetInstance()->GetDevice()->SetFVF( D3DFVF_2DVERTEX );
        D3Dsystem::GetInstance()->GetDevice()->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0,4,0,2);

        均用一般的设置。

        在scene里定义Flat *  flatmodel;

        ....................

        flatmodel=new Flat(float2(0,0),float2(1024/5,768/5));

        ....................

        等等

        在场景更新函数里加入:

 

        //mpReflectTarget->GetTexture() 得到贴到水面的纹理

 

        flatmodel->SetTexture(mpReflectTarget->GetTexture());

        有关于mpReflectTarget的相关实现请看:引擎技术研究之水的渲染

 

        最终效果图:

        

 

         

 

 

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值