Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > 2D图像处理:斜切
【标  题】:2D图像处理:斜切
【关键字】:2D
【来  源】:http://blog.csdn.net/bestpdg/archive/2006/06/07/777962.aspx

2D图像处理:斜切

Your Ad Here

斜切在2D游戏中
使用过photoshop的人,大概都使用过“斜切”这种图形处理。斜切有什么用呢?在45度斜视角的游戏里,你有没有注意到城门上的字呢?它们就是使用了斜切。如果不使用斜切,字的视角和场景就会显得很不协调,看起来很别扭。斜切在2D的场景制作中是经常用到的功能。

斜切的算法
我们来看看photoshop是怎么实现斜切的吧。制作过程就不阐述了,

上图是制作后的效果。从图中可以知道,转换后的“日”字才会和背景黑板的视角一致,看起来才会真正融入到我们的游戏中,要不象第一幅一样,看起来很别扭。
我们留意一下,实际上两个“日”字的“竖”的长度都没变,“横”相对于竖的位置也没变。或许有些人说,这不是图象旋转吗?不是的,图象旋转的话,竖的长度会跟着变化。你看看和"Y"轴平行的那两"|""|",转换以后的长度都一样的。斜切和图象的旋转一样,都是属于图象的几何变换。

下面用伪代码给出实现。
//Bitmap是对bmp文件处理的一个类
//注意,该代码不能编译,只是给出实现算法
//参数bmp是源图,iAngle是斜切的角度,单位:度

#define PI 3.1415926535
#define RADIAN(angle) ((angle)*PI/180.0) //convert angle to radian
void Bitmap::BiasCut(const Bitmap& bmp,int iAngle)
{
 int iWidth    = bmp.GetW() ;  //源图的高度
 int iHeight    = bmp.GetH();   //源图的宽度
 float RotateAngle =(float)RADIAN(iAngle); //斜切的角度,就是黑板和X轴的交角,将角度转换为弧度
 double tga    = (double)tan( (double)RotateAngle  ); //tan,就是y/x的值
 DWORD dwNewW   = iWidth;                //转换后的图的宽度
 DWORD dwNewH   = (DWORD)(fabs( iWidth * tga ) + iHeight);//转换后的图的高度
 
 Create(  dwNewW, dwNewH );//创建转换后的的空白图 
 Clear( 0x0 );       //用黑色填充

 Pixel* line_src = bmp.GetPixel() ;//源图图象数据
 Pixel* line_des = GetPixel(); //转换后图象数据  

 DWORD x0,y0,x1,y1;
 for(y1=0;y1<dwNewH;y1++)
 {
  for(x1=0;x1<dwNewW;x1++)
  {
   x0 = x1;    //转换后的象素,x轴没变化
   y0 = y1-x1*tga;//转换后y轴的值,对应源图y轴的值

   if( (x0>=0) && (x0<(DWORD)iWidth) && (y0>=0) && (y0<(DWORD)iHeight))
   {
    line_des[y1][x1] = line_des[y0][x0];//第y1行第x1个象素点的象素 = 源图第y0行第x0个象素点的象素
   }    
  }
 }
}

其中,蓝色部分是算法的核心部分,相信大家都不难看懂。

在游戏全屏模式下,使用远程调试的设置方法:【上一篇】
看E3,看引擎技术:【下一篇】
【相关文章】
  • AJAX开发简略http://dev2dev.bea.com.cn/bbsdoc/20051114124.html
  • (节录)2D,3D,2.5D游戏定义和区别
  • 改进粒子系统-2D Particle
  • VB--自编魔方游戏(2D)
  • 最美2D网游 《凤舞天骄》中的春夏秋冬
  • 用JavaScript绘图 ——JS2D函数集
  • 212d下载
  • 给你的2D游戏添加3D效果
  • 偶用masm32DIY的“好色之徒”
  • 在Java中使用Draw2D和SWT绘图
  • 【随机文章】
  • 如何解掉rockey4的狗
  • 国产Linux前景堪忧?
  • Sort algorithm in Haskell
  • Makefile Introduction
  • WCDMA在设计规划中与GSM的不同
  • 字体窗口终于要改,Windows Vista RC1 的最新进展
  • C语言的版本
  • 控制播放加载的MC的场景
  • 网络工程师应该掌握的知识要点
  • 鬼火loading完全手册
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.