2023年3月30日 星期四

Custom Projection Matrix to fit Vulkan

➡️ 前篇

前技

這是Projeciton Matrix裡

A和B的製造過程

投影矩陣對z的修正(Directx的版本,NDC的z會落在0~1之間)

客製化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
其實是同個投影矩陣

回頭看結果2的鏡相空間

結果2 在NDC的 鏡相空間

不就和結果3一樣嗎?

下圖的Z軸方向可能會讓人產生誤會
應該要畫得跟上圖的Z軸一樣才對
結果3 在NDC

沒有留言:

張貼留言