看板 GameDesign 關於我們 聯絡資訊
各位先進好,雖然我沒打算走遊戲設計,不過這裡跟DirectX比較有關聯 所以過來這求助 簡單來說我要用DirectX 繪製一個曲面加上格線以及座標軸 目前的做法是座標軸、曲面、格線分3個物件各用DrawPrimitive畫出來 成果如下圖 http://imgur.com/KoN7YqY 問題在紅圈處有些預想應該被白色曲面遮住的格線顯示了出來 看起來比較像白色曲面畫完的平面被格線疊上去 之後我有試著打開Z-buffer但狀況沒改善 所在這種狀況下不適合用DrawPrimitive繪製物件? 因為我只靠google+MSDN自幹找不到好的解決方法 希望可以有人指點一二 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.66.73 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1503025224.A.B1A.html ※ 編輯: commandoEX (140.115.66.73), 08/18/2017 11:01:12
Bencrie: depth test 不是本來就應該開嗎? 08/18 12:33
Bencrie: 沒開就看誰後畫誰就會在上層 08/18 12:34
現在是用SetRenderState中設定 D3DRS_ZEnable→true //啟動Zbuffer D3DRS_ZWriteEnable→true //Zbuffer可寫 D3DRS_ZFunc→lessequal //留下小於等於的值 我想這樣設應該沒錯? 如果在D3DPresentParameter裡設定 EnableAutoDepthStencil→True AutoDepthStencilFormat→D3DFMT_D24X8 這樣反而繪製不出物件
Bencrie: 然後如果 model 沒位移,兩個 polygon 疊在一起可能會 08/18 12:35
Bencrie: 有 z fighting 08/18 12:35
目前是格線的Y值是原始資料+1讓他飄在曲面上
cjcat2266: depth test沒設定對吧,多檢查一下,跟DrawPrim應該沒 08/18 12:57
cjcat2266: 有關係 08/18 13:06
※ 編輯: commandoEX (140.115.66.73), 08/18/2017 14:26:35
cjcat2266: 或許這是個蠢問題,不過還是小心為上,你一開始有 08/18 14:33
cjcat2266: 創造z buffer嗎? 設定都正確,一開始沒有創造和連結 08/18 14:33
cjcat2266: 還是一樣不會有效果 08/18 14:34
感謝提點! 剛剛檢查程式碼還真的漏了CreateDepthStencilSurface來創造Zbuffer... 畫出來的格線終於正常了 http://imgur.com/FqRZh6I ※ 編輯: commandoEX (140.115.66.73), 08/18/2017 15:08:32
cjcat2266: 可喜可賀 08/18 15:30
cjcat2266: 另外不建議用Y+1這種作法讓格線畫在曲面上 08/18 16:03
cjcat2266: 因為只要繪製尺寸一改,有機會明顯漏餡 08/18 16:04
cjcat2266: 其實你這張圖已經有點露餡了,近看可以看到格線浮空 08/18 16:05
cjcat2266: 建議用內建z bias或在pixel shader裡面自己實作z bias 08/18 16:05
cjcat2266: 繪製格線的時候,在normalized device coordinate 08/18 16:06
cjcat2266: 做最終Z值微調,移到曲面正前方,且沒有任何視覺誤差 08/18 16:07
Schottky: 原來還有最終 Z 值微調這招 08/18 16:40
謝謝您的建議 大概就是把偏移方向改到視線向量來會比較適當? ※ 編輯: commandoEX (140.115.220.131), 08/18/2017 22:29:22
hodsala: 好懷念 題外問一下? DirectX9是我那個年代的主流 後期 09/06 05:09
hodsala: 我印象到了DX11 現在開發3D還是用DX9嗎?@@ 我那年代指的 09/06 05:10
hodsala: 是十二年前左右 現在沒有其它主流SDK了嗎@@? 09/06 05:10
cjcat2266: 最新圖像API是DX12, OpenGL 4.6, 和Vulkan 09/06 06:35
cjcat2266: Windows 7以後都不能用DX9 09/06 06:36