john_he 发表于 2008-1-26 14:19:31

深度缓冲和Alpha混合问题

D3D开了深度缓冲和Alpha混合后出现问题……


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

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


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

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

lw 发表于 2008-1-27 17:56:57

N年不用都忘了,是不是其他地方的问题?
偶还第一次听说ALPHA有问题来着

不过一直就没有用过Z BUFFER好像XD

john_he 发表于 2008-1-28 17:25:11

嘛……用Z BUFFER主要是想让引擎可以不必按深度排序就可以渲染,因为我不是很想写排序……

不用深度BUFFER的话,先画前面的再画后面的也会出问题吧……例如先画Spirte再画背景,Spirte就会被背景挡住,即使Spirte的深度比背景小……

tamashii 发表于 2010-9-27 23:55:43

可恶啊!!如果是C# + MDX我就能解释了!!啊啊啊!!!

总而言之就是Sprite->Begin(D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_DEPTH_BACKTOFRONT);
页: [1]
查看完整版本: 深度缓冲和Alpha混合问题