网页功能: 加入收藏 设为首页 网站搜索  
精灵Alpha轮廓线的获得
发表日期:2006-08-20作者:[转贴] 出处:  

 曾经写过一篇关于精灵轮廓处理的文章. 游戏中对精灵做实时的边缘alpha平滑绝对是对美工作图的不足,而在精灵轮廓线上留下锯齿, 或黑(白)边,的一种弥补. 但是, 如何获得精灵的带 Alpha 级轮廓线的确是值得商榷的地方.

  上次提到的一个简单的方法是将精灵缩小到 1/4, 以此来获得额外的信息. 效果是不错, 但单单为了获得轮廓线而将所有的图象都作到 4 倍大, 无疑是一种浪费; 而另一种合适的方法是, 3D MAX 渲染的图片同时可以得到一张 Alpha 通道位图, 从里面获得需要的信息; 又或者从其他带有 Alpha 通道的位图格式(比如 .PSD) 中取得.

 本文不分析那些复杂的位图格式, 这里给出一个简洁的算法可以基本满足获取精灵轮廓线的需要.

1.将精灵位图的背景设为黑色, 精灵本身全部填成蓝色.

2.用一个 3x3 的矩阵(如下)去过滤位图.
111
181
111

3.具体的做法是, 将位图中逐点处理, 每个点的颜色值乘上 8, 加上周围 8 个点的值, 其和除以 16.获得的蓝色掩图就包含了我们需要的 alpha 级. 所有非纯蓝和纯黑的点都是轮廓上的点, 而其色彩值和纯蓝值的比即是alpha 值.

4.对比算出的掩图和源图, 可以获得一条轮廓线. 如果获得的轮廓线上的点在源图上是透明色, 那么我们可以将其周围点的色彩的平均值定为它的颜色.

附过滤程序:

#include "windsoul.h"

BMP *bmp;

void blue(BMP *b)
{
    int i,j,c;
    c=b->line[0][0];
    for (i=0;ih;i++)				// 編輯者:錯誤,請到云風工作室進行查閲
        for (j=0;jw;j++)
            if (b->line[i][j]!=c) b->line[i][j]=0x1f;
            else b->line[i][j]=0;
}

void blur(BMP *b)
{
    int i,j,red=0,green=0,blue;
    for (i=0;ih-3;i++)
        for (j=0;jw-3;j++)
            b->line[i+1][j+1]=(8*b->line[i+1][j+1]+
                              b->line[i][j]+
                              b->line[i][j+1]+
                              b->line[i][j+2]+
                              b->line[i+1][j]+
                              b->line[i+1][j+2]+
                              b->line[i+2][j]+
                              b->line[i+2][j+1]+
                              b->line[i+2][j+2])/16;
}

int wsInit()
{
    bmp=load_bmp("sprite.bmp");
    blue(bmp);
    blur(bmp);
    save_bmp(bmp,"blur.bmp");
    clear_bitmap_ex(screen,0);
    return 0;
}

int wsMain()
{
    draw_sprite(screen,bmp,0,0);
    update_screen();
    return 0;
}

void wsExit()
{
    destroy_bitmap(bmp);
}
我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 精灵Alpha轮廓线的获得
本类热点文章
  在DirectX 8 中进行2D渲染
  DirectDraw打造极速图形引擎(一)
  用窗口模式运行游戏
  DirectDraw编程基础
  Windows的位图alpha混合技术
  再谈GDI模式作图
  终极优化你的游戏——使用脏矩形技术
  D3D8里面的2D图形编程
  全屏模式
  对2D游戏引擎设计的一些思考
  DirectX8中的二维图形高级技巧
  使用标准GDI实现游戏品质的动画系统
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00419