將法線從模型空間變換到世界空間

2021-10-05 13:14:12 字數 1207 閱讀 3379

問:

struct vertexin

;struct vertexscreen

;void main_v(vertexin posin,

out vertexscreen posout,

uniform float4x4 modelviewproj,

uniform float4x4 worldmatrix,

uniform float4x4 worldmatrix_it,

uniform float3 globalambient,

uniform float3 lightposition,

uniform float3 lightcolor,

uniform float3 kd)

這是乙個漫反射光照模型的頂點著色器**,其中的這一句不是很理解

float3 n = mul(worldmatrix_it, normal).xyz;
這句**應該是要將法線從模型空間變換到世界空間吧,為什麼不直接左乘乙個worldmatrix,而是要左乘worldmatrix_it?

worldmatrix_it是什麼意思?是世界變換矩陣的轉置的逆?

答:

並不一定需要inverse transpose,僅當變換包含非等比例縮放時才需要。後者不這樣做的話,法線便不會垂直於平面。

先證切線向量(tangent vector)可以直接使用變換矩陣來做變換。

由於法線的定義就是垂直於平面,即法向量

因為變換後的法向量

證明法向量需要用變換矩陣的逆的轉置來做變換,才能保證變換後的法向量垂直於變換後的表面。

另外,對於正交矩陣(orthogonal matrix)

由於只含等比縮放、旋轉的變換矩陣是正交矩陣,其逆的轉置即等於自身,所以這情況下不需要使用逆的轉置來變換法線。

參考資料:

機器學習演算法 線性模型

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

模型法線的計算以及調整

在 中,總結了幾種根據 face normal 計算 vertex normal 的方法 簡單來說,就是根據頂點周圍的共光滑組的面法線的和求平均來得到該點的頂點法線 這個方法,在考慮了每個三角面的兩條邊的角度作為權重,來計算最後的頂點法線 根據三角面的兩條邊的長度的積的倒數來作為權重計算最後的法線。...

S04 切線空間與法線紋理

在學習法線貼圖紋理的時候無法避免的遇到了切線空間的學習和理解的問題,在此記錄下自己理解的過程。法線紋理的目的和存在的意義 是在底模上表現出高模的各種凹凸細節,而為什麼要表現凹凸細節呢,很簡單,就是為了光照計算,模擬出高模的凹凸細節,光照的時候可以更加接近現實的質感。如果直接在專案中使用高模的話就不存...