请问有关深度缓存

antiMight 2012-07-10 05:23:41
D3DRS_ZWRITEENABLE这个是设置对深度缓存的读写,那么如果我clear深度为1.0f后,设置D3DRS_ZWRITEENABLE 为FALSE,再画三角形到非1.0f深度,就不会显示了是吗?
问题是,红龙书里Firework粒子系统中,在渲染梨子系统前,将D3DRS_ZWRITEENABLE 设置为了FALSE,那么应当画不出来了不是吗?这样做的用意是什么呢?
...全文
282 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
antiMight 2012-07-10
  • 打赏
  • 举报
回复
知道了,看了MSDN,发现我对此参数理解有偏差
If FALSE, depth comparisions are still made according to the render state D3DRS_ZFUNC, assuming that depth buffering is taking place, but depth values are not written to the buffer.
也就是说虽然没有改写深度缓存,但是深度比较测试还是进行了的。所以此参数设定为FALSE后的一切绘制相当于与FALSE前深度缓存做比较,因为每次测试成功就绘制,相应地帧缓存改变,而深度缓存没变,以关闭写缓存前的深度值为基准,我们看到的就是分为两部分,远离深度部分,深度测试总失败,重叠部分不绘制,比原深度更靠近部分,深度测试总成功,所以总绘制,所以这部分看到的深度效果是与渲染顺序有关的,只要大于原深度,越靠后的就越靠上。这个过程中深度缓存没有改变,但帧缓存一直在改变。所以我猜测,帧缓存的更新是在深度缓存之前的,在深度测试时每次对比点深度都会将近的点的像素写到帧缓存,但不一定写到深度缓存,写不写就取决于D3DRS_ZWRITEENABLE了,不管写不写,下次深度测试依旧进行,依旧将新的点更新到帧缓存(只不过不写深度缓存的话,对比对象没有变),如此推测,在关掉写深度缓存后,帧缓存与深度缓存是不同步的,而且是很可能。不知我猜测的对否
antiMight 2012-07-10
  • 打赏
  • 举报
回复
还有,我想弄明白的是,帧缓存是否是随深度缓存同步更新的?(保留离屏幕最近的点),是的话,关掉写深度缓存,深度缓存不更新,那么帧缓存也不更新了吗?这到底是怎么个顺序呢?求解答啊各位。
antiMight 2012-07-10
  • 打赏
  • 举报
回复
自己顶个,我刚测试了下,画两个三角形的时候,对离屏幕近的三角形设置了ZWRITEENABLE 为FALSE,但显示的还是近的这个为什么呢?既然深度缓存不会被改写,那么保留的应该还是原来的Z才对啊,那么绘制的不应当是刚刚的三角形吗?
现在我的疑惑就是深度缓存中存的是否是要被绘制的点的深度值?如果是的话,D3DRS_ZWRITEENABLE设置为FALSE后,相当于绘制的深度被锁定了?那么关掉写缓存后再绘制的图像在它上面还是特殊的规则呢?
零资源分下载,分享精神至上~ 一个综合型的Direct3D示例程序,用键盘上W,A,S,D,I,J,K,L,↑,↓,←,→12个键加上鼠标在美丽的三维空间中翱翔。包括了Direct3D初始化,DirectInput输入处理,顶点缓存,光照与材质,文字输出,颜色,纹理贴图,四大变换,网格模型,X文件载入等等知识(当然还有默认被开启的深度缓存)。 其中的3D人物模型使用的是PS3版《真三国无双6》中的王元姬 ,一袭蓝衣,很美。 背景音乐为雅尼的《兰花》。 源码的配套博文是 《【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8657656, 点击Debug下的exe文件可以直接看到运行效果,运行需要DirectX运行库的支持。报缺少D3D的DLL系列错误的童鞋们请google/百度一下 “DirectX 9.0c runtime”,下载并装个最新版的。 报缺少MVCR100D.Dll错误的朋友们去下一个安装就可以了,或者直接点击sln打开工程再次编译一次。 如果是想调试并运行源代码,但是报错了,请去下载最新版DirectX SDK并进行DirectX开发环境的配置。 编写环境:VS2010 我的博客地址是http://blog.csdn.net/zhmxy555,源码结合配套文章一起看效果更佳。 希望能和大家一起交流,共同学习,共同进步。 by浅墨

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧