計算三角網格的頂點法向量

2021-06-22 00:24:21 字數 944 閱讀 9603

原文**:

前段時間基本上完成了場景編輯器的大部分工作,現在已經可以用它生成自己需要的網格模型了。目前,在編輯器中對生成的網格是指定面的法向量,這對於用場景生成bsp等相關操作已經足夠了。不過為了測試bsp的健壯性,準備實現一下基於bsp的光線跟蹤演算法來看看效果,於是只是指定面的法向量就顯得不太夠用,因為在逐畫素作著色時就需要對面上各個點的法向量進行插值,因此就需要各個頂點的法向量。查了下相關的資料,找到了一種簡單但卻有效的頂點法向量生成演算法。

最簡單也是最直接的求頂點的法向量的方法是遍歷此頂點所關聯的所有三角形,將這些三角形上的法向量單位化後疊加,然後求出法向量的均值即可。

vertexnormal = 0,0,0;

foreach ******** connect to current vertex;

vertexnormal += ********normal;

vertexnormal /= connected********nums;

但這樣求出的法向量往往效果不好,特別是當一些很小的多邊形共面時。為了解決這個問題就需要使各個三角形並不是簡單的等比例貢獻法向量。直觀上很容易發現,每個三角形與頂點相關聯的那個角的大小是變化的,因此就可以使用此角度的大小來作為單個三角形對頂點法向量的貢獻因子。

vertexnormal = 0,0,0;

totalangle = 0;

foreach ******** connect to current vertex;

angle = acos(dot(edge1 , edge2));

vertexnormal += tranglenormal * angle;

totalangle += angle;

vertexnormal /= totalangle;

在實現時要注意,使用的角為關聯當前頂點的那個角。

末使用頂點法向量進行的渲染:

使用計算出的頂點法向量的渲染:

頂點法向量的計算

在opengl程式設計中,三維模型頂點法向量的計算很重要,它直接影響著顯示的效果 本人接觸opengl時間不長,很長一段時間一直困惑於法向量計算的問題,後經仔細研究並找了些資料才基本實現了法向量的計算演算法,現總結如下,希望對初學者能有些幫助。大家知道,在opengl中頂點 三角形模型對光照的反射取...

三角形 平面法線 頂點法線

在direct3d中,三角形是構成實體的基本單位,因為乙個三角形正好是乙個平面,以三角形面為單位進行渲染效率最高。乙個三角形由三個點構成,習慣上把這些點稱為頂點 vertex 三角形平面有正反面之分,由頂點的排序決定 頂點按順時針排列的表面是正面,如圖。其中與三角形平面垂直 且指向正面的向量稱為該平...

三角形 平面法線 頂點法線

在direct3d中,三角形是構成實體的基本單位,因為乙個三角形正好是乙個平面,以三角形面為單位進行渲染效率最高。乙個三角形由三個點構成,習慣上把這些點稱為頂點 vertex 三角形平面有正反面之分,由頂點的排序決定 頂點按順時針排列的表面是正面,如圖。其中與三角形平面垂直 且指向正面的向量稱為該平...