设计DirectX游戏开头画面淡入淡出的效果

 

 在潜水很多天后,今天又有时间来这里写文章了。我今天写的文章是有关于DirectX游戏开头画面的,大家肯定看过一些有名的游戏,它们在开头肯定是会显示游戏公司的商标和游戏的图标。但是为了给大家一种电影的感觉,他们往往会逐渐显示这些二维图片。这种显示方式叫做淡入淡出(fade in and fade out)。下面我就用一个例子程序来说说我是怎么使用DirectX来实现这个效果的。
 其实在我学习这个效果的时候,我也想了很多。起初我是想用雾(fog)这种特效来模拟的。但是我突然发现使用雾的特效要设置很多很多的参数,而且我在试验的过程中往往得不到应有的效果。这可使我非常失望。原本想通过一个循环,使雾的颜色随着时间的变化而改变,这样的出来的显示效果应该是很好的,可是实际情况并非如此。我的第一种方法泡了汤。
 第二种方法是试图使用一个小小的视频来进行显示。我曾经为了实现这个小小的功能,去了有着悠久历史的gamedev.net网站进行询问。来自世界各地的游戏开发者给了我很多答案。其中有个人给我推荐了使用BINK(见http://baike.baidu.com/view/1313785.htm)来进行游戏开场动画的设计。不过要掌握BINK的话,还要很长的一段路,所以第二种方案也没有被我采纳。
 最后没有办法。我想要的效果是,只要使用载入一张图片,然后对图片纹理进行不同的渲染,这样不就行了?我这样想着,对下面这样的结构进行分析。
struct stD3DVertex
{
 float x, y, z;
 unsigned long color;
 float tu, tv;
};
这个结构和我以前使用的结构有所不同,这个结构多了tu和tv这两个变量。查了查书,知道这两个变量是描述纹理坐标起始位置和结束位置的。这些值是0~1之间的任意值。而且我仔细地研究了一下,前面三个xyz变量中,有两个变量x、y是表述载入图像显示的位置的,理论上可以无限大还是无限小,但是过大或过小会使图像看不清,所以应在-0.5到0.5之间是最清楚的。然后以颜色为变量,简单地设置一下循环,诶,效果出来啦。
 下面就是我的程序的所有代码。

Code:
  1. /*--------------------------------------------------  
  2. 蒋轶民制作:E-mail:[email protected]  
  3. 文件名:GameInit.cpp  
  4. 作用:加载游戏片头动画  
  5. ---------------------------------------------------*/  
  6.   
  7. /*--------------------------------------------------  
  8. 这里借鉴使用了Allen Sherrod的代码  
  9. 所有权归蒋轶民和Allen Sherrod所有  
  10. 详情请见《DirectX游戏开发终极指南》  
  11. ---------------------------------------------------*/  
  12. #include<d3d9.h>   
  13. #include<d3dx9.h>   
  14.   
  15. #pragma comment(lib, "d3d9.lib")   
  16. #pragma comment(lib, "d3dx9.lib")   
  17.   
  18. #define APPCLASS        "打方块游戏"   
  19. #define WINDOW_TITLE    "打方块游戏"   
  20. #define WINDOW_WIDTH    640   
  21. #define WINDOW_HEIGHT   480   
  22.   
  23.   
  24. // 函数的原型   
  25. bool InitializeD3D( HWND hWnd, bool fullscreen );   
  26. bool InitializeObjects( void );   
  27. void RenderScene( void );   
  28. void Shutdown( void );   
  29.   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 35
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值