Unity 法線翻轉

2021-07-16 02:26:13 字數 2164 閱讀 8836

直接上乾貨

vector3 normals = line.getcomponent

().mesh

.normals

; for (int i = 0

; i < normals.length; i++)

line.getcomponent

().mesh

.normals = normals;

int ********s = line.getcomponent

().mesh

.********s

; for (int i = 0

; i < ********s.length; i += 3)

line.getcomponent

().mesh

.********s = ********s;

剛開始想到做法線翻轉,只想到了直接把法線取負值,就是第一段**

vector3 normals = line.getcomponent

().mesh

.normals

; for (int i = 0

; i < normals.length; i++)

line.getcomponent

().mesh

.normals = normals;

結果是這樣子:

就是乙個沒有任何光線資訊的樣子(純黑)

然後轉戰google,5分鐘後解決問題= =

int ********s = line.getcomponent

().mesh

.********s

; for (int i = 0

; i < ********s.length; i += 3)

line.getcomponent

().mesh

.********s = ********s;

加上了第二段**之後,是這樣子的:

(是的,我做的是**渲染的描邊,沒使用shader)

mesh.vertices中,儲存的是圖形的頂點資訊。

mesh.********s中,儲存的是對應於mesh.vertices的頂點的索引。就是乙個三角形在渲染中的三個頂點的順序,所以mesh.********s的長度應該是3的倍數(mesh.********s的型別為int)

那為什麼要交換第一點跟第三點的位置呢?

假如現在乙個三角形是由p0、p1、p2,三個點組成的乙個三角形。

那麼,他的繪製的順序應該是這樣子的:

呈現乙個逆時針的樣子。圖形學中(前幾天看藍寶書看到的,忘了是opengl中的還是說圖形學中都是這樣,請指正。ps. 應該是逆時針吧)將擁有逆時針環繞的多邊形為正面。

即上面這個三角形為正面

若我們從螢幕後面那個方向看這個三角形的話,那你看到的是他的背面。

當我們交換三角形的第一點跟第三點後,他的渲染順序將變成這樣子:

變成了從p2到p1再到p0的這麼乙個順序。即這個三角形現在是乙個順時針環繞,我們看到的這個面,是他的背面。

在unity中,預設的渲染是不會渲染背面的。

這樣子就會出現剛才的這個效果

頂點法線和面法線

在3d世界中每乙個頂點都有顏色,除了使用光源和物體的材質資訊之外,還需要知道每個頂點的法向量,根據光照入射方向和法向量的夾角,計算頂點的最終顏色.那麼我們來了解下頂點法線.頂點法線 每乙個頂點都有法向量,就能知道光線到達物體表面的入射角.面法線 垂直乙個平面的直線叫麵法線 一般情況下頂點法線和面法線...

程式設計題 翻轉翻轉

時間限制 1秒 空間限制 262144k 給定乙個n m的矩陣,在矩陣中每一塊有一張牌,我們假定剛開始的時候所有牌的牌面向上。現在對於每個塊進行如下操作 翻轉某個塊中的牌,並且與之相鄰的其餘八張牌也會被翻轉。如上矩陣所示,翻轉中間那塊時,這九塊中的牌都會被翻轉一次。請輸出在對矩陣中每一塊進行如上操作...

Bent Normal 環境法線

前段時間讀 看到了bent normal這個概念,找了些相關的資料學習了一下。bent normal常見於離線的ambient occlusion渲染中 中文翻譯過來應該叫做環境法線?網上搜尋看有些地方是這麼叫的 從它的字面意思中即可以看出其同樣是一種normal,只不過是做了修改變形 bent 這...