您现在的位置是:首页 > 编程 > 

游戏编程之十 图像引擎DirectXDraw

2025-07-28 09:25:09
游戏编程之十 图像引擎DirectXDraw ​​​图像引擎DirectXDraw   目前win95下比较常用的图像引擎是DirectX,国内资料比较少,我给大家推荐过<<高性能WIDOWS图形设计>>这本书,大家不妨一下.   在我们的游戏引擎中,目前使用的也是DirectX,网上见到有关DirectX的简化接口的对象库,没有使用过,不知如何,最好是自己做这些

游戏编程之十 图像引擎DirectXDraw

​图像引擎DirectXDraw

  目前win95下比较常用的图像引擎是DirectX,国内资料比较少,我给大家推荐过<<高性能WIDOWS图形设计>>这本书,大家不妨一下.

  在我们的游戏引擎中,目前使用的也是DirectX,网上见到有关DirectX的简化接口的对象库,没有使用过,不知如何,最好是自己做这些对象,灵活些.

图像引擎在游戏中的作用是这样的,设置显示模式,管理操作一种特殊图像表面,显示到屏

幕.

图像引擎对象:

class DirectDrawWin

{

HWD hWnd;

BOOL IsUse;

int winWidth,winHeight;

LPDIRECTDRAW2 ddraw2;

LPDIRECTDRAWSURFACE primsurf;

LPDIRECTDRAWPALETTE palette;

CDirectPAGE bakDirectPAGE;//背景表面,是CPICPAGE的继承对象CDirectPAGE的实例

LPDIRECTDRAWCLIPPER clipper;

RECT displayrect;

int displaydepth;

WORD loREDbit, numREDbits;

WORD loGREEbit, numGREEbits;

WORD loBLUEbit, numBLUEbits;

public:

DirectDrawWin();

~DirectDrawWin();

BOOL IsWorking(void);

int OnCreate(HWD _hWnd,BOOL IsFullWin=FALSE,int colors=16,int

width=640,int height=480);

void DrawScene();

BOOL ClearSurface( LPDIRECTDRAWSURFACE surf, DWORD clr, RECT* rect=0 );

BOOL ClearSurface( LPDIRECTDRAWSURFACE surf, DWORD r, DWORD g, DWORD b,RECT* rect=0 );

BOOL BltSurface(LPDIRECTDRAWSURFACE destsurf,LPDIRECTDRAWSURFACE srcsurf, int srcInX,

int srcInY,DWORD flap, RECT *DecView=ULL,RECT *souRectBlt=ULL,//源图片目标区

RECT *lpFillRect=ULL);

CPICPAGE *GetDecDrawPage(void);

LPDIRECTDRAWSURFACE CreateSurface( DWORD w, DWORD h );

HRESULT SetColorKey(IDirectDrawSurface *pdds, COLORREF rgb);

//======================================================================

private:

void SetHWnd(HWD _hWnd);

HWD GetSafeHwnd(){return hWnd;};

BOOL CreateFlippingSurfaces();

void OnDestroy();

DWORD RGBtoPixel(DWORD r, DWORD g, DWORD b);

void GetSurfaceRect(LPDIRECTDRAWSURFACE surf,RECT *lpRc);

DWORD ColorMatch(IDirectDrawSurface *pdds, COLORREF rgb);

BOOL GetSurfaceRect( LPDIRECTDRAWSURFACE surf, RECT& rect);

//

WORD LowBitPos( DWORD dword );

WORD HighBitPos( DWORD dword );

BOOL StorePixelFormatData();

BOOL DetectDisplayMode();

};

  大家可以看到,对外的接口有限,主要是初始设置OnCreate,输出到屏幕DrawScene,然后是表面的生成CreateSurface和图像操作ClearSurface,BltSurface; 初始设置OnCreate():初始DrectX,设置显示模式,申请前表面,背景表面.对于即时滚屏的游戏,为了加快速度,可以将背景表面设置得比显示区大,这样滚动时只要局部更改活动区,设置DrawScene时的起始位置即可.但我们没有使用这项技巧,我们的系统设计原则之一是:尽量少用技巧,靠系统设计提高速度,而不是局部技巧,原因是技巧的适应范围一般有限.系统尽量要求通用.

  表面的生成和图像操作被一个叫CPICPAGE的通用图像页调用,CPICPAGE是一个包括各种位图格式的统一管理对象,游戏在进行图像操作时,不直接与DirectX图像表面打交道,CPICPAGE扩展了DirectX图像操作功能,比如带alpha通道的BLT,以及带亮度的BLT,直接对表面的Line,DrawTxt等.BltSurface()是一个包括许多剪裁定位输求的函数.

  对于窗口模式下的DrawScene,为了避免屏幕产生图像撕裂现象,可以利用垂直同步刷新同步地更新屏幕,为了减少此过程的等待时间,可以使用多线程技术.

  为了加快游戏显示速度,在使用DirectX中有许多可以挖掘的技巧.

有关DirectX的部分我不作详细介绍,网上有一部分资料,另外可参阅<<高性能WIDOWS图形设计>>一书,我们的这个对象就是在其书的基础上简化而来,需要这部分源代码的朋友可来信与我们联系.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022-04-06,如有侵权请联系 cloudcommunity@tencent 删除高性能技巧游戏编程对象

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1253082.html

相关标签:无
上传时间: 2025-07-27 22:33:48
留言与评论(共有 18 条评论)
本站网友 鄢陵租房
7分钟前 发表
对外的接口有限
本站网友 山西太原儿童医院
28分钟前 发表
然后是表面的生成CreateSurface和图像操作ClearSurface
本站网友 remarkable
23分钟前 发表
初始DrectX
本站网友 百度网盘怎么用迅雷下载
4分钟前 发表
在使用DirectX中有许多可以挖掘的技巧. 有关DirectX的部分我不作详细介绍
本站网友 重庆洁牙
7分钟前 发表
COLORREF rgb); //====================================================================== private
本站网友 攻击服务器
29分钟前 发表
设置显示模式
本站网友 京沪高铁线路图
24分钟前 发表
BOOL IsFullWin=FALSE
本站网友 齐墩果酸片
21分钟前 发表
原始发表:2022-04-06
本站网友 秀英二手房
9分钟前 发表
国内资料比较少
本站网友 000061农产品
30分钟前 发表
不知如何
本站网友 坡道上的家
24分钟前 发表
设置显示模式
本站网友 字体安装包
6分钟前 发表
然后是表面的生成CreateSurface和图像操作ClearSurface
本站网友 安得广厦千万间
10分钟前 发表
在使用DirectX中有许多可以挖掘的技巧. 有关DirectX的部分我不作详细介绍
本站网友 菠萝的营养价值
3分钟前 发表
我们的这个对象就是在其书的基础上简化而来
本站网友 银隆百货
0秒前 发表
目前使用的也是DirectX
本站网友 地面找平
17分钟前 发表
RECT *DecView=ULL
本站网友 沙井租房信息
1分钟前 发表
DWORD g