游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2865|回复: 4

Z-Buffer问题

[复制链接]

65

主题

225

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
发表于 2004-2-22 19:47:00 | 显示全部楼层 |阅读模式
当材质是半透明时,为什么有时不显示被前景物体遮盖的后景物体呀?

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2004-2-22 20:01:00 | 显示全部楼层

Re:Z-Buffer问题

那是因为你没有把Z筛选设到always。
z筛选的默认就是,一个像素点填充时会比较z值,如果比当前该点的z小就画并更新该点z值,如果大就不画,至于blend操作则是在画的时候进行的,所以除非你按照严格的从远到近的原则画,即‘画家描绘法’否则就会出现你说的问题。
我的建议就是关闭z-buffer或者把D3DRS_ZFUNC设为D3DCMP_ALWAYS

65

主题

225

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
 楼主| 发表于 2004-2-23 19:29:00 | 显示全部楼层

Re:Z-Buffer问题

太感谢了!!!

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-2-24 22:13:00 | 显示全部楼层

Re:Z-Buffer问题

把D3DRS_ZFUNC设为D3DCMP_ALWAYS的话
慢画上去的不透明点就肯定会被先画的覆盖

在这种情况下,如果不是按严格的由远及近或由近及远来画,怎样才能做到前景物体遮盖的后景物体?

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2004-2-24 23:06:00 | 显示全部楼层

Re: Re:Z-Buffer问题

sleepingboy: Re:Z-Buffer问题

把D3DRS_ZFUNC设为D3DCMP_ALWAYS的话
慢画上去的不透明点就肯定会被先画的覆盖

在这种情况下,如果不是按严格的由远及近或由近及远来画,怎样才能做到前景物体遮盖的后景物体?

这个当然,其实我的意思是在画透明的立体物体时需要这么设(比如一个透明的立方体,同时有多个面都透明)
如果透明的只是一个面的话(比如要构造玻璃的效果),完全可以不这么设,就用zfunc的默认设置就可以了
在同时有不透明和透明的物体(并且该物体并不是像上面说的只有一个面),则比较麻烦
一种方法是:画这个透明物体的时候必须要设成always,画整个场景时则需要由远及近地画。
另一种方法:可以用stencil buffer,先把zfunc设为D3DCMP_LESSEQUAL,把所有物体画一遍,最后虚画一遍透明物体(zfunc设置不变)。把没有被不透明物体遮挡的透明物体的那部分pixel用stencil buffer标记出来,下一次再画一遍透明物体,画透明物体时使用zfunc_always,然后检测stencil就可以没有错误地画出透明物体了,这样不必要由远及近。但是透明物体等于画了两遍。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-14 18:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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