| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
C语言 DirectX游戏开发入门
作者:佚名    文章来源:不详    点击数:    更新时间:2006-9-8
  立一个全屏的640×480×16的显示模式,所以我们得这样设置:

lpdd7->ooperativeLevel(hwnd, DDSCL_ALLOWREBOOT | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);


  现在协作级别已经设置好了,让我们再看看改变显示模式的函数:

HRESULT SetDisplayMode(
DWORD dwWidth,
DWORD dwHeight,
DWORD dwBPP,
DWORD dwRefreshRate,
DWORD dwFlags
);



  别忘了用宏去检测调用函数的成功或失败!大多数的参数同你料想的差不多:

  · DWORD dwWidth,dwHeight:以象素为单位,新显示模式的尺寸。

  · DWORD dwBPP:新显示模式的色彩深度。就是每一个象素有多少位字节。可以设置为8,16,24或32。警告:很多显示卡不支持24-bits。

  · DWORD dwRefreshRate:屏幕的刷新频率。但你最好设置为0,使用默认的刷新频率。

  · DWORD dwFlags:对不起,这次没有列表了^_^,唯一的选择是DDSDM_STANDARDVGAMODE,它把显示模式设置为0x13(DOS程序员的好朋友),取代了Mode X的320×200×8的模式。如果你还想使用其它的模式(你可能经常需要),没有问题,把它设置为0好了。

  这些就是显示模式的设置,事先最好了解你的显示卡支持的显示模式,它们通常都支持640×480,800×600,1024×768等等,这些都是标准的模式。但是如果你非得设置成542×366的模式,你可能就会得到错误的反馈。科技在发展吗,什么都是可能的。让我们继续吧!
九.创建表面

  这一次,我们需要比调用一个函数多一点点的东东。创建表面不是很难的,实际上,也是由一个单独的函数完成的,但是首先你要填充一个描述你所要创建的表面的结构。给你看这个结构之前,我只想告诉你,你不必填满所有的成员。^_^这就是它,DDSURFACEDESC2:

typedef struct _DDSURFACEDESC2 {
 DWORD dwSize;
 DWORD dwFlags;
 DWORD dwHeight;
 DWORD dwWidth;

 union
 {
  LONG lPitch;
  DWORD dwLinearSize;
 } DUMMYUNIONNAMEN(1);

 DWORD dwBackBufferCount;

 union
 {
  DWORD dwMipMapCount;
  DWORD dwRefreshRate;
 } DUMMYUNIONNAMEN(2);

 DWORD dwAlphaBitDepth;
 DWORD dwReserved;
 LPVOID lpSurface;
 DDCOLORKEY ddckCKDestOverlay;
 DDCOLORKEY ddckCKDestBlt;
 DDCOLORKEY ddckCKSrcOverlay;
 DDCOLORKEY ddckCKSrcBlt;
 DDPIXELFORMAT ddpfPixelFormat;
 DDSCAPS2 ddsCaps;
 DWORD dwTextureStage;
} DDSURFACEDESC2, FAR *LPDDSURFACEDESC2;


  坦率的说,编写DirectDraw的应用程序其实并不难。但是事情往往是这样,80%的工作只需要我们花费20%的时间就可以完成,而剩下的20%的工作却需要我们花费80%的时间来完成。DirectDraw编程比这还要严重,就笔者的看法,至少90%的工作只需要我们不到10%的时间来完成,而剩下的不到10%的工作却至少需要我们90%的时间!结构DDSURFACEDESC就是10%的一部分,它较为复杂,它嵌套了其它的结构。让我们看看这个怪物到底做了什么。我只说说重点的部分:

  · DWORD dwSize:任何DirectX结构都有dwSize这个成员,表示结构的大小。有了它,当函数接收到指向这些结构的指针时,就可以测定结构的大小了。

  · DWORD dwFlags:太好了,又有一大堆标志常量了^_^ !这些标志告诉接收函数哪些数据成员是有效的。要想使需要的数据成员有效,就必须传递相对应的标志常量给dwFlags,你当然可以用“|”组合它们。以下是列表:

  ◎ DDSD_ALL:所有的数据成员都有效。
  ◎ DDSD_ALPHABITDEPTH:表示数据成员dwAlphaBitDepth有效。
  ◎ DDSD_BACKBUFFERCOUNT:表示数据成员dwBackBufferCount有效。
  ◎ DDSD_CAPS:表示数据成员ddsCaps有效。
  ◎ DDSD_CKDESTBLT:表示数据成员ddckCKDestBlt有效。
  ◎ DDSD_CKDESTOVERLAY:表示数据成员ddckCKDestOverlay有效。
  ◎ DDSD_CKSRCBLT:表示数据成员ddckCKSrcBlt有效。
  ◎ DDSD_CKSRCOVERLAY:表示数据成员ddckCKSrcOverlay有效。
  ◎ DDSD_HEIGHT:表示数据成员dwHeight有效。
  ◎ DDSD_LINEARSIZE:表示数据成员dwLinearSize有效。
  ◎ DDSD_LPSURFACE:表示数据成员lpSurface有效。
  ◎ DDSD_MIPMAPCOUNT:表示数据成员dwMipMapCount有效。
  ◎ DDSD_PITCH:表示数据成员lPitch有效。
  ◎ DDSD_PIXELFORMAT:表示数据成员ddpfPixelFormat有效。
  ◎ DDSD_REFRESHRATE:表示数据成员dwRefreshRate有效。
  ◎ DDSD_TEXTURESTAGE:表示数据成员dwTextureStage有效。
  ◎ DDSD_WIDTH:表示数据成员dwWidth有效。

  · DWORD dwheight,dwWidth:表示要创建表面的尺寸。以象素为单位。

  · LONG l

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页


相关文章