我有一個很大的有限元模型,我可以從中獲取模型的「表面」,比如定義該有限元模型表面的元素和頂點。爲了繪圖的目的(好的情節總是一場勝利!)我想很好地繪製它。我的做法是隻使用Matlab計算錯誤的表面法線?
lungs.Vertex=vtx;
lungs.Faces=fcs;
patch(lungs,'facecolor','r','edgecolor','none')
注:我需要edgecolor沒有,因爲這是四維的數據和不同的FEM有不同的三角測量,如果邊緣繪製用戶會頭暈。
然而,這將輸出一切都在一個很普通的紅色,這是不是很好(因爲它不能顯示圖形的細節的複雜性,這是肺部,對於細心)。
因此我決定用ligthing:
camlight; camlight(-80,-10); lighting phong;
但同樣,這是不完全正確的。事實上,似乎補丁的nromals不是由Matlab正確計算的。
我的猜想是,也許補丁並不總是定義逆時針,因此一些法線到錯誤的方向。然而,這不是直接檢查。
任何人都有類似的問題,或ahint我應該怎麼解決這個問題,以便在這裏繪製一個不錯的曲面?
編輯
只是爲了密謀的抖動,這裏是@magnetometer答案得到的結果:
我絕對沒有法線,那就是問題所在。如果所有的法線都是「外向型」或「內向型」,那麼兩者都不會有任何問題,只需重新調整它們並妥善處理即可。但從圖片看來,有些人進入內部,有些進入了外部,使得製作錯誤。 – 2014-09-23 08:58:07
確實非常非常有趣的功能。但我仍然有問題。我有「面對法線」,但似乎matlab希望「頂點法線」來設置照明。你如何建議我解決這個問題? Vertexnormals =平均值(facenormals_with_that_vertex)? – 2014-09-23 14:53:52
我這樣做,得到了驚人的結果。非常感謝,這是一個非常好的答案。 – 2014-09-23 15:13:16