游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4852|回复: 11

如何用Directx实现32位显示模式下的图片颜色渐变

[复制链接]

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2011-8-4 15:15:00 | 显示全部楼层 |阅读模式
  在32位的显示模式下,我是想实现图片颜色渐变,在画面切换的时候,显示时是慢慢黯淡下来,接下来才切换到下一个要显示的画面。请教大家怎么实现!

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-8-4 18:15:00 | 显示全部楼层

Re: 如何用Directx实现32位显示模式下的图片颜色渐变

whbc: 如何用Directx实现32位显示模式下的图片颜色渐变
慢慢黯淡下来

你能利用图片进行说明吗?
光用语言来描述图像效果,并不是好方法。

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2011-8-4 18:53:00 | 显示全部楼层

Re:如何用Directx实现32位显示模式下的图片颜色渐变

这个叫淡入淡出....

77

主题

485

帖子

486

积分

中级会员

Rank: 3Rank: 3

积分
486
发表于 2011-8-4 19:04:00 | 显示全部楼层

Re:如何用Directx实现32位显示模式下的图片颜色渐变

直接改变顶点的颜色值.

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2011-8-5 00:40:00 | 显示全部楼层

Re: 如何用Directx实现32位显示模式下的图片颜色渐变

嗯,就是比如我进入游戏,游戏的GUI我点击开始游戏,然后这个GUI界面是慢慢编黑,然后才是开始游戏了!有一个渐变效果!不是立即就黑掉了,我是新手,我是这样想的,把代码贴出来,请大家指点了!显示模式是32位的!

  1. void Screen_Transitions(LPDIRECTDRAWSURFACE7 lpdds){
  2.            //lpdds是传入进来的表面,要在哪一个表面进行颜色渐变,就是逐渐颜色变黑
  3.         int index;           // used as loop counter
  4.         int color;               
  5.         DDSURFACEDESC2  ddsd;
  6.         DDRAW_INIT_STRUCT(ddsd);
  7.         lpdds->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR,NULL);//锁表面
  8.         int lpitch=ddsd.lPitch>>2;
  9.         DWORD * dest_buffer1=(DWORD *)ddsd.lpSurface;
  10.         for(int index_x=0; index_x <80;index_x ++)
  11.         {               
  12.                 for(index =0;index <ddsd.dwWidth*ddsd.dwHeight;index ++)
  13.                 {      //获取R,G,B的值
  14.                         UCHAR  blue =dest_buffer1 [ index*4 + 1 ];
  15.                         UCHAR  green=dest_buffer1 [ index*4 + 2 ];
  16.                         UCHAR  red  =dest_buffer1 [ index*4 + 3 ];  
  17.                         if((color=_RGB32BIT(0,red,green,blue))!=_RGB32BIT(0,0,0,0))//判断是否这一点的像素值为黑色,
  18.                                 color=_RGB32BIT(0,0,0,0);
  19.                         dest_buffer1[index]=color;//不是的话就使这点像素值为0,即为黑色
  20.                         dest_buffer1+=ddsd.dwWidth;        //内存地址加一个表面的宽度
  21.                 }
  22.         }
  23.         lpdds->Unlock(NULL);//解锁表面
  24.         lpitch=0;
  25.         dest_buffer1=NULL;
  26.        
  27. } // end Screen_Transitions
复制代码

这样是不行的,但是我找不到好的解决办法,望大家指点了!谢谢!

10

主题

149

帖子

149

积分

注册会员

Rank: 2

积分
149
QQ
发表于 2011-8-5 07:37:00 | 显示全部楼层

Re:如何用Directx实现32位显示模式下的图片颜色渐变

gamma

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2011-8-5 08:42:00 | 显示全部楼层

Re: Re:如何用Directx实现32位显示模式下的图片颜色渐变

笨笨雁: Re:如何用Directx实现32位显示模式下的图片颜色渐变

gamma

什么意思啊?不懂!

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-8-6 10:47:00 | 显示全部楼层

Re: Re: 如何用Directx实现32位显示模式下的图片颜色渐变

whbc: Re: 如何用Directx实现32位显示模式下的图片颜色渐变

嗯,就是比如我进入游戏,游戏的GUI我点击开始游戏,然后这个GUI界面是慢慢编黑,然后才是开始游戏了!有一...

也就是说,图片从正常颜色逐渐变成黑色,是吗?

在游戏界面层加上一张黑色的透明面,应该能做到吧?
刚开始alpha值是0.0,所以看不到这个黑色面。
点击开始之后alpha逐渐变成1.0,画面变成黑色。

或者使用“雾”效果。

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2011-8-6 12:04:00 | 显示全部楼层

Re: Re: Re: 如何用Directx实现32位显示模式下的图片颜色渐变

snhun: Re: Re: 如何用Directx实现32位显示模式下的图片颜色渐变


也就是说,图片从正常颜色逐渐变成黑色,是吗?

在游戏界面层加上一张黑色的透明面,应该能做到吧?
...

alpha我还没怎么碰到过,所以有些陌生,有这样的实例吗,还请您详细说说!不是很清楚!可以加你的QQ吗!想向你请教下!我的qq:1004869498!

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2011-8-11 14:14:00 | 显示全部楼层

Re:如何用Directx实现32位显示模式下的图片颜色渐变

如果不需要从周边逐渐变化 就只需要根据时间控制顶点的alpe值就可以了....
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 17:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表