作者commandoEX (卡曼都)
看板GameDesign
标题[程式]为曲面加上格线问题(DirectX 9)
时间Fri Aug 18 11:00:21 2017
各位先进好,虽然我没打算走游戏设计,不过这里跟DirectX比较有关联
所以过来这求助
简单来说我要用DirectX
绘制一个曲面加上格线以及座标轴
目前的做法是座标轴、曲面、格线分3个物件各用DrawPrimitive画出来
成果如下图
http://imgur.com/KoN7YqY
问题在红圈处有些预想应该被白色曲面遮住的格线显示了出来
看起来比较像白色曲面画完的平面被格线叠上去
之後我有试着打开Z-buffer但状况没改善
所在这种状况下不适合用DrawPrimitive绘制物件?
因为我只靠google+MSDN自干找不到好的解决方法
希望可以有人指点一二
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.115.66.73
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1503025224.A.B1A.html
※ 编辑: commandoEX (140.115.66.73), 08/18/2017 11:01:12
1F:推 Bencrie: depth test 不是本来就应该开吗? 08/18 12:33
2F:→ Bencrie: 没开就看谁後画谁就会在上层 08/18 12:34
现在是用SetRenderState中设定
D3DRS_ZEnable→true //启动Zbuffer
D3DRS_ZWriteEnable→true //Zbuffer可写
D3DRS_ZFunc→lessequal //留下小於等於的值
我想这样设应该没错?
如果在D3DPresentParameter里设定
EnableAutoDepthStencil→True
AutoDepthStencilFormat→D3DFMT_D24X8
这样反而绘制不出物件
3F:→ Bencrie: 然後如果 model 没位移,两个 polygon 叠在一起可能会 08/18 12:35
4F:→ Bencrie: 有 z fighting 08/18 12:35
目前是格线的Y值是原始资料+1让他飘在曲面上
5F:推 cjcat2266: depth test没设定对吧,多检查一下,跟DrawPrim应该没 08/18 12:57
6F:→ cjcat2266: 有关系 08/18 13:06
※ 编辑: commandoEX (140.115.66.73), 08/18/2017 14:26:35
7F:推 cjcat2266: 或许这是个蠢问题,不过还是小心为上,你一开始有 08/18 14:33
8F:→ cjcat2266: 创造z buffer吗? 设定都正确,一开始没有创造和连结 08/18 14:33
9F:→ cjcat2266: 还是一样不会有效果 08/18 14:34
感谢提点!
刚刚检查程式码还真的漏了CreateDepthStencilSurface来创造Zbuffer...
画出来的格线终於正常了
http://imgur.com/FqRZh6I
※ 编辑: commandoEX (140.115.66.73), 08/18/2017 15:08:32
10F:推 cjcat2266: 可喜可贺 08/18 15:30
11F:推 cjcat2266: 另外不建议用Y+1这种作法让格线画在曲面上 08/18 16:03
12F:→ cjcat2266: 因为只要绘制尺寸一改,有机会明显漏馅 08/18 16:04
13F:→ cjcat2266: 其实你这张图已经有点露馅了,近看可以看到格线浮空 08/18 16:05
14F:→ cjcat2266: 建议用内建z bias或在pixel shader里面自己实作z bias 08/18 16:05
15F:→ cjcat2266: 绘制格线的时候,在normalized device coordinate 08/18 16:06
16F:→ cjcat2266: 做最终Z值微调,移到曲面正前方,且没有任何视觉误差 08/18 16:07
17F:→ Schottky: 原来还有最终 Z 值微调这招 08/18 16:40
谢谢您的建议
大概就是把偏移方向改到视线向量来会比较适当?
※ 编辑: commandoEX (140.115.220.131), 08/18/2017 22:29:22
18F:推 hodsala: 好怀念 题外问一下? DirectX9是我那个年代的主流 後期 09/06 05:09
19F:→ hodsala: 我印象到了DX11 现在开发3D还是用DX9吗?@@ 我那年代指的 09/06 05:10
20F:→ hodsala: 是十二年前左右 现在没有其它主流SDK了吗@@? 09/06 05:10
21F:推 cjcat2266: 最新图像API是DX12, OpenGL 4.6, 和Vulkan 09/06 06:35
22F:→ cjcat2266: Windows 7以後都不能用DX9 09/06 06:36