開場
設定逆時鐘方向是三角形的正面
這是我們的三角形和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
- 矩阵求三角形面积——计算机图形学中



沒有留言:
張貼留言