DX中關於背面剔除概念的澄清

2021-04-13 03:10:15 字數 968 閱讀 8121

最近在渲染地形時發現把背面剔除模式設為ccw結果我的地形正面就顯示不出來了!知道是網格編織順序出了問題(但我記得我的網格是按順時針編織的),為了徹底將這一問題搞明白,去查了下dx 的sdk,結果發現裡面講得一團糟!上網搜了下,發現有不少人對這個問題也沒搞清楚.於是重新看了下andré lamothe的軟體引擎.在這裡作一下總結.

dx可以設定為對順時針三角形剔除(cw),對逆時針三角形剔除(ccw).但是當你按順序傳遞給計算機三個頂點座標v1,v2,v3時計算機如何知道 這三個頂點定義的三角形是順時針還是逆時針的呢?這與兩個因素有關,乙個是三角行的面發現法線(這個一旦設定了頂點座標就不會改變了),乙個是此刻的觀察向量(假定它是從照相機位置到三角形面上任一點的向量).如下圖:

(注意:由於dx採用了左手座標系,所以你要判斷法線的朝向要用左手定則,而不是右手定則.)

計算機通過等式  normal_vector = (v2-v1)  x(叉乘)  (v3-v1) 計算出面法線. 假定此時照相機的位置是 pos

則計算機需要乙個由下列等式產生的輔助向量 dir_vector = v3(或者是v1,v2中的任乙個) - pos .

然後計算機將dir_vector和normal_vector這兩個向量進行點乘.如果結果<0,dx就認為這個三角形是順時針的,

如果結果》0,dx就認為這個三角形是逆時針的. 然後dx就可以根據你設定的剔除模式(d3dcull_ccw或d3dcull_cw)來決定是否渲染這個三角形.

因此得出結論,如果你用順時針順序編織你的三角形,你就應該採用逆時針剔除方式d3dcull_ccw

反之採用順時針剔除方式d3dcull_cw.

剔除設計中多餘的概念

軟體設計首先要整理使用者的業務模型,然後以此為參照,結合環境條件,建立軟體系統模型。在這個過程中,很重要的一點是 要剔除軟體模型中多餘的概念。哪些是 多餘的概念 呢?如果乙個概念是從使用者的業務模型中無法直接觀察到的,而是設計者推想出來的,那麼這個概念就是多餘的概念。我們想象乙個鐵路公司,經營著ab...

ArcGIS 關於剔除DEM中的異常值(上)

任務 使用srtm1 dem資料替換該dem影象裡存在的異常值。思路 裁剪出原dem中存在的異常區域,用裁剪出異常區域繼續裁剪 掩膜srtm1,將srtm1填補到異常區域,這樣做的話填補的邊界一定會很明顯,所以後期是不是要進行高斯平滑,處理一下邊界資料?由於現在還沒有處理到後面的流程,所以記錄就暫時...

cocos2d x中的一些概念

cocos2d x中有很多概念,下面就對這些概念做一下總結 導演類 導演類ccdirector是cocos2d x中乙個非常重要的類,它是乙個抽象類,用於管理場景物件,採用單例設計模式,在整個工程中只有乙個例項物件。由於是單例模式能夠儲存一致的配置資訊,便於管理場景物件 主要完成的工作如下 初始化遊...