【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3866|回复: 11

怎样透明色彩近似关键色的杂色??

[复制链接]
发表于 2006-4-13 15:14:03 | 显示全部楼层 |阅读模式

图片设置了关键色,因为有渐变色,有些和关键色颜色相近的不能过滤,比如说我的关键色是RGB(0,0,0),那渐变色边缘有几圈RGB(8,0,0)的颜色,这些颜色在渲染时不会被过滤,那图片显示出就带着黑呼呼的边框了~~初学者,望高手帮忙解答~~谢谢了!!

如图:

发表于 2006-4-13 21:24:21 | 显示全部楼层

我看见你的图了,但是太小看不清楚;所以我一直没有明白到底问题出在哪里,

我建议你用PNG格式的图片试试.

 楼主| 发表于 2006-4-14 12:37:13 | 显示全部楼层

谢谢你的回复.

我的问题是:一个有渐变色的图,在渲染时,渐变色有些颜色值是按近关键色的,就是上面我说的,比如说,关键色是黑色RGB(0,0,0),图片表述的是一个白到黑的渐变圆形,那么在创建Texture时,我把关键色设成黑色,显示出来的图就会带着黑色的边框,因为这些边框都不完全等于关键色的值,比如RGB(8,0,0)等等~~

发表于 2006-4-14 13:29:08 | 显示全部楼层

我大概明白了,那样是会出现锯齿状的轮廓的,还是我说的,换成PNG格式的试试

PNG支持透明,你只需要把你要的图片放在透明背景上面就可以,不再需要背景色,也不用设置keycolor了。这是一个不错的方法。

你看看这个就是PNG格式的图片,它的背景是透明的,绘制的时候直接绘制出透明效果

 楼主| 发表于 2006-4-14 13:58:13 | 显示全部楼层

还有一个问题,我顺序用sprite画3张图,为什么后画的反而被先画的图遮住了呢??好像不管我按什么顺序画,见鬼的,有张图竟永远在最上面~~.不知是为什么??

忘了说了~~图片不是我自己的,是从别的游戏里提出来的,要是更改图片,那将不是很容易弄啊~~,呵呵~~

发表于 2006-4-14 14:55:15 | 显示全部楼层

当然是后画的遮挡前面画的程序是顺序执行,先画最里面的,然后再在上面画一层,再在上面的画一层。你说永远在最上面的那张图片肯定是程序在最后面代码控制的。

从别的游戏里面提取得图片是不好处理,那就尽量不要选择带有渐变的图片。才开始作游戏,尽量多看模拟器里面的游戏,那里面的游戏都是很基础的一些设计,不会出现现在高级程序里的手法,模仿模拟器里的游戏很锻炼人的。推荐初学者尝试一下 :)

 楼主| 发表于 2006-4-14 16:48:55 | 显示全部楼层

//影子
g_pSprite->Draw(spr[2]->pTextureList[index].pTexture, &rct, NULL,&D3DXVECTOR3(0,0,0),0x7fffffff);
//身体
g_pSprite->Draw(spr[0]->pTextureList[index].pTexture, &rct, NULL,&D3DXVECTOR3(0,0,0),0xffffffff);
//武器
g_pSprite->Draw(spr[1]->pTextureList[index].pTexture, &rct, NULL,&D3DXVECTOR3(0,0,0),0xffffffff);

可我不管把画身体放在那个位置,它永远在最上面,汗了~~~

发表于 2006-4-14 17:40:15 | 显示全部楼层
单从这个代码来看是正确的,但是为什么会在最上面我也不清楚,看是不是spr[1]->这个纹理才是人啊!
 楼主| 发表于 2006-4-17 10:19:16 | 显示全部楼层

呵呵,图片是没错的,我也就是搞不懂怎么搞的...

还有件希奇事,在VC的DEBUG下运行的图片顺序与单独运行程序图片的显示顺序竟也不一样~~

见鬼了~~~

[em02]
发表于 2006-4-17 13:35:50 | 显示全部楼层

汗~~

那就要仔细检查程序,如果发现运行不对头的时候,清空解决方案,再生成一次;有的时候是编辑器自己没有更新的新的exe造成的。

 楼主| 发表于 2006-4-20 09:02:53 | 显示全部楼层
现在图形的顺序倒好像没有错了,透明渐变的问题,我用gameres论坛上sunicdavy的方法,设置destblend为d3dblend_one,可以起到类似色饱和的效果,不过,setrenderstate总是对所有的texture起作用,不知有没有什么办法让它只对单个或需要的相关texure起作用呢?
发表于 2006-4-20 10:00:24 | 显示全部楼层
可以,在某一张纹理以前setrenderstate设置为True,绘制完这个纹理以后setrenderstate设置为False接着绘制别的纹理就可以了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-14 05:32

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表