战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

今天顺利显示静态模型, 加上纹理后,发现ZBuffer好像有点不对劲

image

于是检查D3DRS_ZENABLE,D3DRS_ZWRITEENABLE, 结果都是TRUE

无奈,只有与我以前正确的Demo对比210个渲染状态. 有部分渲染不同的,使用硬代码强行纠正,结果: 无效

怀疑顶点格式破损, 重新使用以前的模型格式,排除这个可能性, 结果:失败

无奈中,检查设备选项, 突然注意到D3DPRESENT_PARAMETERS 结构体中的EnableAutoDepthStencil 设置是FALSE

因为这次设备类是重写的,对比以前正确代码, 有差异,将其改为

PresentParameters.EnableAutoDepthStencil    = TRUE;
    PresentParameters.AutoDepthStencilFormat    = D3DFMT_D16;

以前翻阅SDK时,注意过这个选项, 这是由D3D帮你管理ZBuffer.

测试, 问题解决.

 

分析: 如果EnableAutoDepthStencil  = FALSE, 意味着连ZBuffer都没有,那更不要说渲染状态.

image 正确结果

posted on 2010-05-26 17:01 战魂小筑 阅读(1844) 评论(5)  编辑 收藏 引用 所属分类: 渲染 Shader 引擎

评论

# re: 由Direct3D ZBuffer引起的血案 2010-05-26 20:45 小时候可靓了
你以前代码是啥样。。。  回复  更多评论
  

# re: 由Direct3D ZBuffer引起的血案 2010-05-26 23:17 evoup
good,谢谢分享经验  回复  更多评论
  

# re: 由Direct3D ZBuffer引起的血案 2010-05-27 09:17 战魂小筑
纠正下错误
原文已经改为
PresentParameters.EnableAutoDepthStencil = TRUE;  回复  更多评论
  

# re: 由Direct3D ZBuffer引起的血案 2010-05-27 15:47 月下圆舞曲
@战魂小筑
真的很巧,我今天早上上课给同学调d3d的程序的时候也出现这问题了,开始以为是Clear函数没清空啥的,后来发现他没写D3DCLEAR_ZBUFFER,但加了错更严重,最后把代码看了一遍才发现是你这问题。。当时吐血了。。。  回复  更多评论
  

# re: 由Direct3D ZBuffer引起的血案 2010-05-28 00:17 小时候可靓了
@战魂小筑
這迴清楚瞭。  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理