`
webcenterol
  • 浏览: 906533 次
文章分类
社区版块
存档分类
最新评论

渲染目标的实际应用: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的相关实现请看:引擎技术研究之水的渲染

最终效果图:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics