作者NDark (溺於黑暗)
看板GameDesign
標題Re: [程式] 請教DirectX 後面的牆壁會透過去
時間Wed Dec 23 18:55:44 2009
※ 引述《chchwy (mat)》之銘言:
: 自問自答
: 雖然我不知道為什麼 不過這個問題跟near plane有關
: 似乎near plane太小 Z-Buffer就會失效
: 我自己實驗near plane的距離
: 0.5 => Z-Buffer有開等於沒開
: 1.0 => 狀況大有改善,只剩牆壁邊緣一小塊有問題
: 1.5 => 問題完全消失
: 問題是解決了...不過為什麼 就有待高人指點了orz..
其實是z buffer解析度的問題.
想像成從near plane到far plane被分成固定的解析度0 ~ 1.0 (可以先想像它分成256段)
(其實靠近near plane的地方分到的解析度比較多)
當near與far相對於物體極端的大的時候.(也就是近的太近,遠的太遠)
(這是新手常犯的錯誤,以為range設大一點可以涵蓋比較多)
物體的前後的深度就因為浮點數精度的關係被視為相等,(被放在256段裡面的同一段)
會發生後面的三角面反比前面的三角面來的前面的錯誤結果.
通常會造成物體的閃爍(一下後面的三角面跳到前面,一下又躲回去)
(通常是多層正面的物體)
正確的做法之一是分析場景中的所有物體,適當的給予正確的near與far.
讓所有的物體暨可以都看得見,又同時共享最大的深度資源.
正確的做法之二是使用z-bias這個功能,確保後畫的比較靠近.(特殊狀況會這樣用)
--
"May the Balance be with U"(願平衡與你同在)
視窗介面遊戲設計教學(
http://0rz.tw/V28It ),討論,分享。歡迎來信。
視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework)
遊戲工具設計(Game App. Tool Design )
電腦圖學架構及研究(Computer Graphics)論文代讀(含投影片製作)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.96.77.176
推 makuro:剛好最近有碰到這塊 其實有第三個無腦解法 12/23 23:38
→ makuro:把z buffer開大(深)一點 16 24 32bit就看個人怎麼抉擇了 12/23 23:41
推 chchwy:謝謝 的確我的場景far相當大 可能因為這樣才會有問題 12/26 22:52