開場
設定逆時鐘方向是三角形的正面
這是我們的三角形和camera設定
使用glm::lookAt,預設是右手的Camera |
為什麼3角形沒有出來?
結果1 程式碼來自vulkan tutorial |
但是他的可以
結果2 程式碼來自vulkan tutorial |
然後改成這樣也行?
結果3 |
to NDC space
肉眼可見DirectX、openGL、Vulkan 大家在NDC三角形都是逆時針 如果vulkan是在這裡做face culling 結果1就會看到三角形 |
但結果1並沒看到
所以不是在這裡做!
viewport space
判定順時鐘、逆時鐘的座標系必須是
x軸從銀幕左往右
y軸從銀幕下往上
所以我們先自己鏡射一下
如果是在這裡做face culling Vulkan是逆時鐘 結果1就會看到三角形 |
但結果1並沒看到
所以也不是在這裡做!
所以也不是在這裡做!
那麼現在
假設存在1個 Face cullng space
用來判定face culling
這樣一來 DirectX和OpenGL都是逆時鐘,看得到三角形 而Vulkan是順時鐘,看不到 和結果1相符 |
結果2
代表在camera space先沿著y軸方向鏡射
再乘上projection matrix
Vulkan是順時針 所以不是在NDC做 |
Vulkan在Screen Spcae是順時鐘 Vulkan在face culling space是逆時鐘 所以結果2看的到 |
這是一個負負得正的結果
結果3
客製化Projeciton Matrix
去fit這種奇怪的NDC
在Screen Space是順時鐘
在face culling space是逆時鐘
|
參考資料
- Vulkan Tutorial - Descriptor pool and sets
- Vulkan集成:图形API坐标系对比及解决方案
- Flipping the Vulkan viewport
- VkFrontFace Manual Page
- 矩阵求三角形面积——计算机图形学中
沒有留言:
張貼留言