DirectXGuide入门(上)

2008-04-09 04:08:35来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

本教学主要介绍DXGuide类库2D部分的一些入门知识,主要包括如何用DXGDD向导创建一个DirectX程序、翻页、渲染页面等,不管你是高手还是新手,包管你尽快上手。

  1.第一个DirectX程序
  2.让你的页面动起来
  3.渲染页面
  4.从文件中读入位图
  5.将你的文件打包
  6.......

  

  第一个DirectX程序

  在开始之前,首先你要下载DXGuid类库的库文件和头文件(注意有调试版和发行版哦!),这里暂且假定你已经将DXGuid的头文件放在D:\DXGuid\include,库文件放在D:\DXGuid\lib。然后还要下载一个工程向导DXGDD.awx,将它放在..\Microsoft Visual Studio\Common\MSDev98\Template中(VC 6.0)。最后是设定DXGuid头文件和库文件的路径,从Tools菜单依次进入Options...\Directorys ,分别在Include files和Library files中加入头文件和库文件的路径。

  准备工作完成之后,你就可以开始你的第一个DirectX程序了。进入VC,从File菜单选择New,在Pogjects表单中选择DirectX Guides DirectDraw AppWizard,并在Project name中输入你的工程文件名,如DDTest。

  单击OK按钮你就可以生成一个DirectX程序了。

  在编译连接之前按Alt F7进入工程参数设置,在General中将Microsoft Foundation Classes设置为Use MFC in a static Library。

  好了到这里,你的DirectX程序就可以编译运行了,怎么样,还不错吧?程序可以通过Alt Enter键在窗口和全屏模式下进行切换。

  2)让你的页面动起来

  从显屏中我们看到的是正面显存(Front buffer)中的内容,我们同时还可创建一个或多个反面显存(Backbuffer),就象一张纸有正面和背面一样,我们可以将纸翻过来看。同样我们可以在Front buffer和Backbuffer之间进行翻页操作。一般是在Back buffer中进行渲染,渲染好后将它翻到正页即可,翻页后Back buffer就成了Front buffer,而原来的Front buffer则成了Back buffer,其实Front buffer和Back buffer构成的是一个环路,就象立在我们面前的一个立方柱,正面朝向我们的是正面,其它三个面称为背面。不过编程时这些细节都不需要我们参与处理。全部过程只需一个函数Flip()就可完成。翻页有什么好处?您想想看如果我们直接在Front buffer中做渲染,眼睛是可以看到渲染过程的,就象在黑板上画画,先要将黑板擦干净,再将图一个一个? 去。也就是说每一显示帧中间都有一个能被眼睛察觉的间隙,看起来会觉得很不舒服。下面我们来看看如何翻页。

  利用Class Wizard转到CDDTest的UpdateFrame()

  bool CDDTestApp::UpdateFrame(void) { // add your code here ! m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0);

  return CDirectXApp::UpdateFrame(); }

  将m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0);用以下代码替换:

  . . . . . . static BOOL bOdd = FALSE; if (bOdd) m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0); else m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0xFFFFFFFF); bOdd = !bOdd; . . . . . .

  运行后会怎么样?眼睛是不是很不舒服?不过不要紧,下一个教程会好受些。

  好象忘了什么?Flip()?哪有翻页动作?我怎么没看见?其实基本的动作DXGuide 都给你封装到基类里了,看到CDirectXApp::UpdateFrame()了没有?你将它改成m_pDirectDraw-$#@62;Flip()再运行看看,真对不起,又让你眼花了,下不为例。

  

  渲染页面

  前面讲到我们的渲染都是在Back buffer里完成的,渲染后再Flip到Front buffer 。那么如何取到Backbuffer呢?我们回到前面一个教程来看看,在前面有这样一句:m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0);这里的(CDDDevice*)m_pDDDevice是你当前使用的显卡设备,CDDDevice主要用于枚举显示设备,也就是说DDGuide支持多显屏,这里暂不多加介绍,知道m_pDDDevice是什么就可以了。GetRenderSurface()返回的就是此显卡的Back buffer,返回值类型是CDDSurface*,Fill(DWORD)是CDDSurface是一个成员函数,用于在buffer里填充颜色。所以Fill(0)是在buffer里填充黑色,Fill(0xFFFFFFFF)是填充白色。看到这里大家应该知道,其实前一教程就已经做渲染操作了。下面我们来看看如何在buffer上做一些简单的渲染。

  还是用第一个例子中生成的工程来做一些小小的改动,在CDDTestApp::UpdateFrame()中,将

  m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0);

  删除,并在此位置插入以下行:

m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0xFFFFFFFF);
CDC dc;
m_pDDDevice-$#@62;GetRenderSurface()-$#@62;GetDC(dc);
dc.SetBkColor(0x00FFFFFF);
dc.SetTextColor(0x0000FF00);
dc.TextOut(10,10,"Welcome to DirectX Guide!");
dc.Arc(30,30, 100,100, 30, 30, 40, 40);
dc.MoveTo(30,30);
dc.LineTo(40,40);
m_pDDDevice-$#@62;GetRenderSurface()-$#@62;ReleaseDC(dc);

  熟悉GDI编程的朋友一定觉得眼熟,不错,这里几乎是一样的,如果你不在乎速度的话,尽可使用DC,不过建议还是少用为好。好了,编译运行看看,你不觉得帧数比第一个例子减少了很多吗?

156

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Windows95的内存共享

下一篇:DirectXGuide入门(下)