因為需要的論文,最近開始學習OpenGL。由於剛入門的初學者有這么總會遇到很多問題,。
這些天,好不容易才OpenGL個問題弄明確了。
幾點迷惑:
- 在網上百度。發現非常多求平面法向量的介紹以及程序。后面才知道頂點法向量才是我要的。
- 對於空間中的三個點。怎么確定平面法向量的方法?這里能夠通過嘗試順時針和逆時針結合結果圖來推斷。以下簡介下如何進行如果。
怎樣通過如果方法推斷平面法向量的方向(這里是指三角面片):
首先,當然要有數據,就是原始數據中每一個面片是由那三個頂點組成。比方如今空間中有一個三角形平面由三個頂點A,B,C組成。
接着。就會存在以下兩種情況,例如以下圖:
因此,我們在程序中僅僅要反着試一次,就會得到我們的結果了。
以下我給出我的部分代碼已經效果圖(斯坦福大學著名的bunny模型):
當中,A和B是后面要進行叉乘的兩個向量,point1,point2,point3就是三角面片的三個頂點。
情況1:
A[X] = point2[X] - point1[X]; A[Y] = point2[Y] - point1[Y]; A[Z] = point2[Z] - point1[Z]; B[X] = point1[X] - point3[X]; B[Y] = point1[Y] - point3[Y]; B[Z] = point1[Z] - point3[Z];
情況2:
<span style="color:#000000;">A[X] = point3[X] - point1[X]; A[Y] = point3[Y] - point1[Y]; A[Z] = point3[Z] - point1[Z]; B[X] = point1[X] - point2[X]; B[Y] = point1[Y] - point2[Y]; B[Z] = point1[Z] - point2[Z];</span>
從上面兩種情況能夠看出。它們確實是相反的。
自己再實際操作的時候能夠去嘗試一下。
計算頂點法向量的過程記錄:
首先,我們要了解幾個概念,平面法向量(平面上兩個不平行。不共線的向量叉乘得到),頂點法向量(以這個點為頂點的全部三角形的法向量之和)。
接着,我們就能夠通過三個頂點求得兩個向量,兩個向量叉乘得到平面法向量。(平面法向量進行歸一化)
然后,統計每一個頂點的全部平面法向量之和。(頂點法向量進行歸一化)
第一連接是bunny一些數據模型格檔,第二個環節是一個包括bunny頂點數據模型和已計算出的頂點法向矢量數據。
計算,我們可以自己用頂點數據頂點的法線,在頂點的法線進行比較,然后,和文件,寫你自己的計算,驗證頂點正常的程序是正確與否。