会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 2D图形
应用MMX指令模拟带ColorKey的Blit操作
发表日期:2006-08-20 22:18:22作者: 出处:  

  ColorKey是什么?你不会连这个都不知道吧!ColorKey就是一种或者一段区间内的颜色值。当硬件在进行Blit操作时,遇到ColorKey指定的颜色,就跳过该点的写像素操作,说白了就是透明色。DirectDraw提供了ColorKey这个属性,做起来很方便。但当我们自己用软件模拟时(因为自己做还可以添加好多其他的操作嘛)就麻烦了,但是我们有MMX。好了,开始入正题:

  我们应用比较指令PCMPEQ[B,W,D]和逻辑指令PAND、PANDN和POR

  设有两幅图P1和P2,要将P2画到P1上,ColorKey是蓝色(BLUE)。我们只从这两幅图里取几个点来看一看,

    ┌───┬───┬───┬───┐  ┌───┬───┬───┬───┐
P1│ A1 │ A2 │ A3 │ A4 │ P2│ BLUEn  │ B2 │ B3 │ BLUE    │
    └───┴───┴───┴───┘  └───┴───┴───┴───┘ 

  先将P2与ColorKey比较,得到掩码mask

      ┌───┬───┬───┬───┐
   │ BLUE   │  B2      │  B3      │ BLUE   │
   └───┴───┴───┴───┘
   ┌───┬───┬───┬───┐
   │ BLUE   │ BLUE   │ BLUE    │ BLUE   │
   └───┴───┴───┴───┘
PCMPEQW ────────────────
   ┌───┬───┬───┬───┐
   │0xFFFF │  0       │  0        │0xFFFF │(mask)
   └───┴───┴───┴───┘ 

  再将P1、P2分别与掩码mask作逻辑操作,不过要注意PANDN指令的源操作数和目的操作数的次序

┌───┬───┬───┬───┐     ┌───┬───┬───┬───┐
│    A1   │    A2    │    A3   │    A4    │     │  BLUE  │   B2     │   B3     │ BLUE   │(src)
└───┴───┴───┴───┘     └───┴───┴───┴───┘
┌───┬───┬───┬───┐     ┌───┬───┬───┬───┐
│0xFFFF │   0      │    0      │0xFFFF │     │0xFFFF │  0       │  0        │0xFFFF │(dest)
└───┴───┴───┴───┘     └───┴───┴───┴───┘
PANDN ─────────── PANDN ───────────────
┌───┬───┬───┬───┐     ┌───┬───┬───┬───┐
│  A1     │  0        │  0       │  A4      │     │  0       │  B2      │  B3      │  0       │
└───┴───┴───┴───┘     └───┴───┴───┴───┘

  最后,将结果作或操作

┌───┬───┬───┬───┐
│  A1     │  0        │  0       │  A4      │
└───┴───┴───┴───┘
┌───┬───┬───┬───┐
│  0       │  B2      │  B3      │  0       │
└───┴───┴───┴───┘
POR ────────────────
┌───┬───┬───┬───┐
│  A1     │  B2      │  B3      │  A4     │
└───┴───┴───┴───┘

  看看,是不是要得到的结果啊! 这样的好处是……(此处省去1000字),好了,下次再见了!

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00275