解決opengl計算頂點的法線問題


        因為需要的論文,最近開始學習OpenGL。由於剛入門的初學者有這么總會遇到很多問題,。

這些天,好不容易才OpenGL個問題弄明確了。

        幾點迷惑:

  1. 在網上百度。發現非常多求平面法向量的介紹以及程序。后面才知道頂點法向量才是我要的。
  2. 對於空間中的三個點。怎么確定平面法向量的方法?這里能夠通過嘗試順時針和逆時針結合結果圖來推斷。以下簡介下如何進行如果。

        怎樣通過如果方法推斷平面法向量的方向(這里是指三角面片):

        首先,當然要有數據,就是原始數據中每一個面片是由那三個頂點組成。比方如今空間中有一個三角形平面由三個頂點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數據包括頂點數據和頂點法向量數據鏈接

第一連接是bunny一些數據模型格檔,第二個環節是一個包括bunny頂點數據模型和已計算出的頂點法向矢量數據。

計算,我們可以自己用頂點數據頂點的法線,在頂點的法線進行比較,然后,和文件,寫你自己的計算,驗證頂點正常的程序是正確與否。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM