固定機能時代的Direct3D的使用上,clipplane的使用很簡單 只要在world空間中射一個或幾個clipplane的平面方程 即可實現裁剪
當使用頂點shader之後,發現出問題了,好像IDirect3DDevice9::SetClipPlane()根本無效。查sdk document一看,
「固定機能パイプラインが使われる場合、平面方程式はワールド空間にあると仮定される。プログラム可能なパイプラインが使われる場合、平面方程式はクリップ空間 (出力頂点と同じ空間) にあると仮定される。」
這是DX9 SDK日本語版的原文,就是講clipplane應該是基於射影空間的(想也是,world空間都由偶自己管理實現的)。按他講的去做搞一下平面變換,發現效果仍然不對,上網一查,bbs.gamedev.net就有複數個人提問跟偶一樣的問題,看來不光是偶的錯誤了。有人講geforce系列不支持 按照dx的document上講的標準應該可以正常工作的。搞了半天費了一晚上時間試來試去還不行。一想算了,自己用在ps中實現把,本來這個clip的固定機能在D3D10中就沒有了,採用shader實現本身也不費事,加一行判斷code就搞定了,也是大勢所趨。
總之能用shader實現的盡量用shader,不僅直接也是未來趨勢所向。
當使用頂點shader之後,發現出問題了,好像IDirect3DDevice9::SetClipPlane()根本無效。查sdk document一看,
「固定機能パイプラインが使われる場合、平面方程式はワールド空間にあると仮定される。プログラム可能なパイプラインが使われる場合、平面方程式はクリップ空間 (出力頂点と同じ空間) にあると仮定される。」
這是DX9 SDK日本語版的原文,就是講clipplane應該是基於射影空間的(想也是,world空間都由偶自己管理實現的)。按他講的去做搞一下平面變換,發現效果仍然不對,上網一查,bbs.gamedev.net就有複數個人提問跟偶一樣的問題,看來不光是偶的錯誤了。有人講geforce系列不支持 按照dx的document上講的標準應該可以正常工作的。搞了半天費了一晚上時間試來試去還不行。一想算了,自己用在ps中實現把,本來這個clip的固定機能在D3D10中就沒有了,採用shader實現本身也不費事,加一行判斷code就搞定了,也是大勢所趨。
總之能用shader實現的盡量用shader,不僅直接也是未來趨勢所向。