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

        由於須要的論文,最近開始學習OpenGL。因爲剛入門的初學者有這麼總會遇到不少問題,。學習

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

        幾點迷惑:.net

  1. 在網上百度。發現很是多求平面法向量的介紹以及程序。後面才知道頂點法向量纔是我要的。
  2. 對於空間中的三個點。怎麼肯定平面法向量的方法?這裏可以經過嘗試順時針和逆時針結合結果圖來推斷。如下簡介下如何進行若是。

        怎樣經過若是方法推斷平面法向量的方向(這裏是指三角面片):code

        首先,固然要有數據,就是原始數據中每個面片是由那三個頂點組成。比方現在空間中有一個三角形平面由三個頂點A,B,C組成。blog

        接着。就會存在如下兩種狀況,例如如下圖:ip

所以,咱們在程序中僅僅要反着試一次,就會獲得咱們的結果了。get

如下我給出個人部分代碼已經效果圖(斯坦福大學著名的bunny模型):入門

當中,A和B是後面要進行叉乘的兩個向量,point1,point2,point3就是三角面片的三個頂點。class


狀況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頂點數據模型和已計算出的頂點法向矢量數據。

計算,咱們能夠本身用頂點數據頂點的法線,在頂點的法線進行比較,而後,和文件,寫你本身的計算,驗證頂點正常的程序是正確與否。

相關文章
相關標籤/搜索