|
|
发表于 2005-8-31 18:24:00
|
显示全部楼层
Re: 给《宣三国》的意见
慢主要是精灵图形处理的问题,因为我至今无法搞清如何使用调色板来配置不同颜色的士兵
VB下处理调色板会给你的程序带来额外的运算负担,调色板技术其实是一种图像压缩技术,用的是一张颜色对照表,我们把这张表叫做调色板。
假设:1对应红色RGB(255,0,0),2对应绿色RGB(0,255,0),那么我们在绘制的时候只要指定像素值为1,屏幕上就显示红色,指定2,就显示绿色。如果我们把对照表换一下,2对应红色RGB(255,0,0),1对应绿色RGB(0,255,0),同样的图片,像素值为1的屏幕上显示绿色,指定1显示红色。
一般情况下我们不在程序中指定调色板,而是由图形文件来获取,这样美工在制作的时候能够看到实际的效果,早期的游戏,颜色数量不是很多,通常把调色板和图像数据分开存储,这样可以节省很多空间和时间。换颜色也很方便,只要换一下调色板就可以了。
但现代游戏不采用这种技术,一是颜色数变得多起来,调色板没有意义,可能调色板本身就比图形数据大很多,比如16位色的调色板也不太现实,gif文件格式其实用的也是调色板压缩技术,但这种文件格式存储的总的颜色数量不能超过256个(注意这是颜色数量不是说只能处理8深的颜色),因为多了,调色板本身就大,文件大小减少不了多少。
现代游戏都采用直接存储像素颜色信息,比如红色就是红色,直接存储RGB(255,0,0),不管什么调色板都是红色。那我们如果要让红色变成绿色怎么办?一种办法就是再画一张绿色的,用空间换时间,美工制作也不是很困难。还有一种办法是做颜色运算,本身只做一张带有灰度的图片,想要绘制红色的就用红的叠加,绘制绿色的就用绿色叠加,这样有个问题就是只能绘制一种色相的,但可以通过程序颜色运算来实现很复杂的动态效果,VB6在逐点像素运算上效率很成问题,其实VC也很慢,实际上是CPU运算太慢,所有会有MMX,SSE加强指令作汇编优化。3D下面我们基本上不利用CPU做这种处理,而利用GPU来处理。
再回头来看调色板的问题,DDRAW下面,只有低于或等于8位位深的Suface才能处理调色板,也就是说你的图片最多只能是256色的。 |
|