幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4666|回复: 3

[游戏编程] 深度缓冲和Alpha混合问题

[复制链接]

23

主题

218

帖子

2470

积分

⑥精研

积分
2470
发表于 2008-1-26 14:19:31 | 显示全部楼层 |阅读模式
D3D开了深度缓冲和Alpha混合后出现问题……


这个是按 “足球Spirte → 文字 → 背景” 的顺序渲染的,渲染时开了Z-Buffering和Alpha混合,Spirte纹理的边缘用了Alpha渐变(PS的羽化),出来的效果就这样了——Spirte边缘Alpha混合错误。

原因大概已经清楚,就是画SP的时候把深度缓冲改写成SP的深度,使得背景画不上去了……
但是又不知道为什么文字可以画得上去(深度:SP < 文字 < 背景),画文字我是用D3DX的D3DXFont和D3DXSpirte接口的,所以我想是不是能有什么机制防止上面这种现象发生……

  
这个是按“背景 → 文字 → 足球Spirte”的顺序,也就是从后到前的顺序渲染的,没有出现错误(嘛…这是当然的),但是这样深度缓冲就完全没有意义了……

现在最想是找出防止Alpha混合错误的方法……是不是有些什么RenderState之类的可以控制D3D的这些行为?D3DXFont和D3DXSpirte为什么又能躲过深度测试?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
ONScripter for PSP/Windows中文版 http://blog.163.com/john_he_
回复

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2008-1-27 17:56:57 | 显示全部楼层
N年不用都忘了,是不是其他地方的问题?
偶还第一次听说ALPHA有问题来着

不过一直就没有用过Z BUFFER好像XD
Style-C
回复 支持 反对

使用道具 举报

23

主题

218

帖子

2470

积分

⑥精研

积分
2470
 楼主| 发表于 2008-1-28 17:25:11 | 显示全部楼层
嘛……用Z BUFFER主要是想让引擎可以不必按深度排序就可以渲染,因为我不是很想写排序……

不用深度BUFFER的话,先画前面的再画后面的也会出问题吧……例如先画Spirte再画背景,Spirte就会被背景挡住,即使Spirte的深度比背景小……
ONScripter for PSP/Windows中文版 http://blog.163.com/john_he_
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2010-9-27 23:55:43 | 显示全部楼层
可恶啊!!如果是C# + MDX我就能解释了!!啊啊啊!!!

总而言之就是Sprite->Begin(D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_DEPTH_BACKTOFRONT);
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2021-11-28 10:14 , Processed in 0.026599 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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