2023年3月30日 星期四

Custom Projection Matrix to fit Vulkan default viewport

➡️ 前篇


客製化Projeciton Matrix

為了fit Vulkan奇怪的NDC

需要

Mb * Ma = Projection Matrix

Ma怎麼來?

Ma

Mb怎麼來?

當NDC的z落在-1~1之間 🐞
Mb

Fix 🐞

vulkan NDC的z落在0~1之間才對
OpenGL才是落在-1~1之間

vulkan tutorial裡有1行
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
就是在指定NDC要用0~1

code from GLM setup.hpp

這樣一來

Mb其實是
A = F/(F-N)
B= -NF/(F-N)
 

比較一下

(MbMa)和GLM的perspectiveRH_ZO
只差在 Result[1][1]的正負

這代表

➡️ 前篇 的結果2修正後的結果3
其實是同個投影矩陣!?


Vulkan在clip space做Face culling嗎?

➡️ 前篇


clip space就是projection space


A X B = n 
n和Vc_to_eye的夾角沒有 > 90度的話
這個三角面可以顯示

用這種方法,三角形應該要顯示
結果1沒有
所以Vulkan不是這樣做的