St.Dix的日记本

Hey! I am St.Dix, 3DGameProgramer, thankyou.

C++博客 首页 新随笔 联系 聚合 管理
  10 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks

好久没有写过关于rendertosurface的程序,好怀念阿。
这个东东主要还是要用一个com接口,sdk说的很清楚,不过很可惜没有中文的。
ID3DXRenderToSurface 接口
该接口用来扩展渲染到表面的方法。
方法列表:
1,BeginScene 开始一个场景
HRESULT BeginScene(          LPDIRECT3DSURFACE9 pSurface,
    CONST D3DVIEWPORT9 *pViewport
);
第一个参数是指向IDirect3DSurface9接口的指针,第二个参数是指向D3DVIEWPORT9结构的指针。
这里需要具体说一下IDirect3DSurface9接口,应用程序通过它使用表面(surface)。
该接口的方法有:
GetContainer 这个方法在该表面作为cubemap或者mipmap贴图时使用,这里不再讨论。
GetDC 这个方法获得设备环境,可以将GDI方法应用在这里。
GetDesc 找回表面的描述。
LockRect 这是最重要的方法,锁定表面上的一个矩形区,然后就可以对这个区域进行读写操作。
HRESULT LockRect(          D3DLOCKED_RECT *pLockedRect,
    const RECT *pRect,
    DWORD Flags
);

关于Rect的详细定义:
typedef struct _D3DLOCKED_RECT {
    INT Pitch;
    void *pBits;
} D3DLOCKED_RECT;

RECT实际上是GDI的常用结构。
第三个参数是锁定标记,比较多,所有的数据区锁定都用这个标志。
ReleaseDC 释放设备环境。
UnlockRect 这个应该不用说,解锁表面。
这也是一个COM接口,需要包含d3d9.h。
2,EndScene 结束一个场景
3,GetDesc  找回渲染表面的参数
4,GetDevice 找回渲染表面相关的Microsoft® Direct3D®设备联合
5,OnLostDevice 释放所有涉及的视频内存资源并删除所有的状态块
6,OnResetDevice 重新设置之后必须调用
备注:
表面能够有许多方法使用包括作为渲染目标,离屏渲染,或者渲染成贴图。一个表面可以通过一个

特殊的视口初始化。 LPD3DXRENDERTOSURFACE 为指向该接口的指针。
typedef interface ID3DXRenderToSurface* LPD3DXRENDERTOSURFACE;
使用该接口需要包含d3dx9core.h并连接d3d9.lib,并且要在windows98以上操作系统运行。
那么如何渲染到这个表面呢?
哈哈,只要在BeginScene和EndScene之间加入普通的渲染函数,就一切ok。
可爱的rendertosurface可以制作动态贴图,可以实时生成立方体贴图,等等一堆超级cool的效果,哈哈。

posted on 2006-05-08 17:40 St.Dix 阅读(1324) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理