欢迎访问:常州市武进区嘉泽中心小学网站 !今天是:
栏目列表
您现在的位置是:首页>>教师>>计算机技术>>程序设计>>游戏开发>>文章内容
用Gamma控制来实现FadeIn和FadeOut
发布时间:2008-11-20   点击:   来源:本站原创   录入者:佚名
 

 

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位以上。

附件:
    关闭窗口
    打印文档
    账号登录
    保持登录 忘记密码?
    账号与武进教师培训平台同步