2019年11月12日 星期二

仿射變換

為什麼?
先內插三角形頂點、再做座標變換=先做座標變換、再內插三角形頂點

線性變換1 link
線性變換2 link
仿射變換1 link

所以可以先在shader裡對三角形的3個頂點做變換 vMVP=v' 後 (clip space)
再內插三角形 (補充1)

v是頂點
MVP =Modle ✖️ View ✖️ Projection Matrix


補充1:
其實是在screen space做三角形內插
但「screen space三角形的內插權重」會等於「NDC三角形的內插權重」α、β、γ
有了α、β、γ,再用透視校正,得到clip space的三角形內插權重α'、β'、γ'


Global space 的轉動慣量

看到cyclone-physics
用下面的方式算出w(角速度)

= R * I' * R-1
τ =α
w = w + αΔt

I'是Local space 的轉動慣量
(它是一個矩陣)
R 是物件當下的旋轉矩陣(用來變換到Global space)
R-1是旋轉矩陣的逆(用來變換到Local space)
--------------

Global space
旋轉中的物體,每個frame的 都在變
但在Local space
I' 是固定的

類似衝量
Δt = ΔP = Δ (m V) = m ΔV
τ * Δt = ΔL = Δ (w) = Δw
( τ = R X F )

L'為Local space的角動量
τ為Local space的力矩

τ' Δt = ΔL'
τ' = ΔL' / Δt
τ' = Δ(I'w') / Δt
τ' = I'Δ(w') / Δt
τ' = I' α'
(類似 F = m a )

--------------

上面提到 τ' = I' α'
(R-1 * τ) = I' * (R-1 * α)
R * (R-1 * τ) = R * I' * (R-1* α)
τ = R * I' * R-1 * α
τ = I * α
就得到了Global space 的轉動慣量
I = R * I' * R-1

--------------

使用
τ = α
w = w + αΔt
如果τ = | 0,0,0 |Tα 也會是 | 0,0,0 |T
那麼 w就不會改變

如果改用
L= L+ΔL
L = w
只要有初始動量,就算之後ΔL = | 0,0,0 |Tw還是會不停的改變

備註:

I = R * I' * R-1 是在Ben的教學裡看到的

2019年11月8日 星期五

點光源的L 👩‍🔬

➡️ 目錄

Warning !

由面光源的L


可知面光源的A,是指面光源的面積
而本篇的A,是指點光源向外輻射後的邊界面積

面光源把Φ分配到面積A ( E = dΦ / dA ) 
再從每個dA向外輻射 ( L = dE / dω cos(θ) )
才算完成能量的傳遞

而本篇從點光源中心往外輻射
把Φ分配到邊界面積A ( E = dΦ / dA = Φ / (4π R2) )
就已經完成能量的傳遞了
所以本篇的推導是錯的

本篇的結果,還會引發後續的問題

先微分dω、再微分dA

用圖像的方式


圖1

水藍色、粉紅色和草綠色的區域
應該是會貼在球面上,像是隱形眼1樣的形狀才對
這裡沒有畫的很好

水藍色、粉紅色、草綠色都是 I = dΦ/dω

可以看出隨著r變長 dI 的厚度會變薄
所以 L = dI /dA 會隨距離變小

用代數推導

點光源有Φ 假設光源平均向外,則
I = dΦ/dω = Φ/ω = Φ/4π

圖1可知,dA切出來的部分就是dI
利用式①
可知水藍色、粉紅色、草綠色的面積為1sr * Rc 2 
(Rc代表代表它們和光源的距離)
圖1可知,dI和I只是簡單的比例關系
所以有 dI = (dA/ Rc2)* I = (dA * I) / Rc2

最後可得
L = dI / dA = I / Rc2
「但L應該是不隨距離而改變的」No Good ❌

先微分dA、再微分dω


圖:點光源

E就像漸漸變大的泡泡當泡泡半徑變大
泡泡變的更薄了(每單位面積有更少的Φ)

「這次L就不隨距離而改變了」It's Good ✔️