我的 software rendering 用的 view matrix 跟 d3d 一樣,但是會有問題,這個問題也許是整個pipeline 最大的瓶頸。
主要的問題是這樣,為了讓 z 可以 mapping 到 near 跟 far plane,view matrix 裡會做些手腳,讓最後的 z 變成 (f / (f - n)) * (1 - n / z),如此一來,當 z 是n 時,深度為0,z 是 f 時深度為 1。上圖是 depth - z 的關係。問題出在 z 小於 0 的時候,depth是正的,如果在這時才作 z 方向上的 culling,那整個三角形的方向就錯了!如果這一塊是無法解決的,那整塊 mesh 就得在 normaliz 之前先跟 view frustum clip,結果則是產生更多的小三角形。讓我慶幸的是……我可以懶得管這件事,讓dx去解決。
主要的問題是這樣,為了讓 z 可以 mapping 到 near 跟 far plane,view matrix 裡會做些手腳,讓最後的 z 變成 (f / (f - n)) * (1 - n / z),如此一來,當 z 是n 時,深度為0,z 是 f 時深度為 1。上圖是 depth - z 的關係。問題出在 z 小於 0 的時候,depth是正的,如果在這時才作 z 方向上的 culling,那整個三角形的方向就錯了!如果這一塊是無法解決的,那整塊 mesh 就得在 normaliz 之前先跟 view frustum clip,結果則是產生更多的小三角形。讓我慶幸的是……我可以懶得管這件事,讓dx去解決。
No comments:
Post a Comment