图像的混合
- 每种颜色都由红绿蓝3种基本色彩(三原色)组合而成;
- 三原色中每一种颜色的亮度用一个8位的二进制数来表示;
- 半透明图色彩=源图像色彩×(100% -透明度)+背景图像色彩×透明度;
- Windows API函数:AlphaBlend
动画的实现
- 所有人物通过一个行走的循环动画实现运动过程
- 玩家有望能从人物的运动中获得更多的细节(信息)
- 预设动画(如战斗情节)能提高游戏的画面质量
- 所有动画是在3dStudio Max中手工设计的
精灵动画(1)
- 基于精灵的人物表现
- 鬼怪ghosts,精灵sprites,骑士knights
- 精灵:前景是图像,背景是透明的
- 精灵动画:将上一帧中精灵出现的地方用背景填充,并在新的指定地点绘制精灵
精灵动画(2)
- 将掩码图和背景图案进行按位AND,使得原始图像的对应位置变空。
- 将原始图像和上一步处理结果按位OR。
- 这样,原始图像贴到背景上并遮盖背景,其余部分(掩码图中白色部分)没有贴到背景上
精灵动画(3)
英文为sprite animation
- 一幅背景图
- 一组模板图(mask)
- 人物的连续显示方式
- 双缓冲机制
- 不要在窗口中直接贴图,避免闪烁
- 建立一个内存DC,然后把所有的贴图动作都在这个DC上进行,最后把结果显示到操作窗口中。
精灵动画(4)
- 对动画序列中的每一帧
- Load背景图
- 确定sprite绘画的位置
- 将某一掩码图与背景图作AND运算
- 将对应的人物图与背景图作OR运算
- 更新sprite绘画的位置
碰撞检测
- 对运动物体的碰撞判断是许多游戏程序中不可或缺的要素
常见的碰撞检测方法
–区域检测
–碰撞点检测
–颜色检测:较为精确,
–相对耗时
2. 采用某种规则形状逼近物体
3.物体之间的碰撞检测转化为规则形状之间的检测
4.碰撞点检测
- 本质是区域检测的一种
- 一般在两个运动物体中的一个物体上设置碰撞点,在另一个物体上设置检测区域,运行时逐个判断碰撞点是否在检测区域中
颜色检测
- 为树林做一张掩码图,将树林用黑色填充。要产生汽车驶入树林后面的效果,先在背景上贴上汽车的图像,然后在上面用镂空图技术画上树林。然后,判断汽车图像在树林图像上的相对位置,将汽车图像上的点和掩码图上相应位置的点做按位AND操作,检查结果中是否有黑色点(RGB值为0)存在。任何颜色的RGB值与黑色图形进行按位AND运算,将得到黑色。如果存在黑色点,表明有碰撞。
图像操作
- 全局操作
- 对图像上的所有象素作同样的操作–如:傅立叶变换、直方图统计、块拷贝、灰度转换、缩放等
2. 局部操作
- 操作只与象素及其周围邻居的值有关
- 如:滤波、边缘检测等
图像缩放
如何生成一个一半尺寸的图像?
- 最简单的方法,隔行隔列取
直方图
- 表示图像中象素颜色值的分布
- 直方图上每一点
- 横坐标:颜色(亮度)值
- 纵坐标:图像中具有该颜色(亮度)值的象素的数目
亮度增强
亮度
- 图像象素颜色平均值
- 用直方图进行亮度增强
- 将每一个象素灰度值加上一个常数
- 得到的直方图是原始直方图向正轴方向的平移
提高对比度
- 每一象素点(x,y)上的图像对比度C定义为
- I(x,y) -该点象素值
- I -背景亮度平均值
- Imax -图像灰度最大值
- 0 –图像灰度最小值
- 通过直方图提高对比度
- 将原始图像直方图的取值范围[Xmin,Xmax]通过线性变换扩大至[0,Ymax]
淡入淡出
- 最简单的图像特效
- 图像从一个黑色背景中出现
2. 令透明度ALPHA从0变到1
- ALPHA = 0图像为黑色
- ALPHA = 1原始图像
- Alpha改变的速度决定了图像的溶解速度
3. 如果让ALPHA从1变到0,就得到淡出的效果