游戏开发

本类阅读TOP10

·DirectX 9.0 SDK 开发包下载(April 2005)
·完成端口的深入理解及一种变态用法
·初学者的福音:游戏开发新手入门指南
·linux下编写OpenGL程序的一些准备工作
·《学VC、编游戏》重点算法解疑·快一点
·Windows的消息机制与消息重定向技术
·《魔兽世界》的寻路体系和作弊原理分析
·《学VC、编游戏》重点算法解疑·再快一点
·5月新开传奇私服|6月新开传奇私服|传奇私服|新区
·《学VC、编游戏》重点算法解疑·狩猎谋生

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
用Gamma控制来实现FadeIn和FadeOut

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

DirectX中提供了一个Gamma控制(从 5.0 开始的吗),利用它可方便的完成FadeIn、FadeOut的功能,而且不
需改动Surface的内容, 基本上不存在速度的问题。我这人特懒,打字也慢(真想有个秘书小姐,我说她打那就爽
了)我就简单的写点。
  代码如下:(我已测试过)

  // declare for gamma fadeout and fadein
  // global var

  LPDIRECTDRAWGAMMACONTROL    lpDDGammaControl = NULL;
  DDGAMMARAMP                  DDGammaRamp;
  DDGAMMARAMP                  DDGammaOld;

  // assume u have succeed create u main surface
  // LPDIRECTDRAWSURFACE lpDDSPrimary = NULL;
  // lpDDSPrimary point to  u main surface
  //------------------Get gamma control 

                         (void **)&lpDDGammaControl);

  //------------------------------------------------------

  // this is fadeout and fadein function
  void gfx_GammaFadeOut()
  {
       int     nIndex;
       int     nIndex0;

        if( lpDDGammaControl == NULL )
             return;

    lpDDGammaControl->GetGammaRamp(0, &DDGammaOld);
        lpDDGammaControl->GetGammaRamp(0, &DDGammaRamp);


       // Fade Out
        for( nIndex0 = 256; nIndex0 >0; nIndex0 -= 4)
        {
             for( nIndex=0; nIndex < 256; nIndex++)
             {
                  DDGammaRamp.red[nIndex]      = DDGammaOld.red[nIndex]*nIndex0/256;
                  DDGammaRamp.blue[nIndex]     =DDGammaOld.blue[nIndex]*nIndex0/256;
                  DDGammaRamp.green[nIndex]    =DDGammaOld.green[nIndex]*nIndex0/256;
             }
             lpDDGammaControl->SetGammaRamp(0 , &DDGammaRamp);
        }
//end 
             for( nIndex=0; nIndex < 256; nIndex++)
             {
                  DDGammaRamp.red[nIndex]      =DDGammaOld.red[nIndex]*nIndex0/256;
                  DDGammaRamp.blue[nIndex]     =DDGammaOld.blue[nIndex]*nIndex0/256;
                  DDGammaRamp.green[nIndex]    =DDGammaOld.green[nIndex]*nIndex0/256;
             }
             lpDDGammaControl->SetGammaRamp(0 , &DDGammaRamp);
    }
//end for
  }
  代码还有点漏洞,就是你必须先调用DirectDraw对象的GetCaps函数以确认你的显卡支持Gamma Control想偷懒
就看看DxSdk 的 DirectX Device Viewer 工具。灵活的使用Gamma control还可以实现一些其他功能,我就不瞎扯
了。它的缺点是:没有软件模拟,只能在全屏下干活,主surface的位深度必须是16位以上。



相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有