開場
設定逆時鐘方向是三角形的正面
這是我們的三角形和camera設定
使用glm::lookAt,預設是右手的Camera |
為什麼3角形沒有出來?
結果1 程式碼來自vulkan tutorial |
但是他的可以
結果2 程式碼來自vulkan tutorial |
然後改成這樣也行?
結果3 |
NDC space
仔細想想,不管是左手camera還是右手camera
我們都可以把它變換到左手的NDC
逆定順時鐘、逆時鐘的座標系必須是
x軸是從銀幕左往右
y軸是從銀幕下往上
所以我們先自己鏡射一下
如果是在這裡做face culling OpenGL、Vulkan都是逆時鐘 結果1就會看到三角形 |
但沒看到
所以也不是在這裡做!
所以也不是在這裡做!
那麼現在
假設存在1個 Face cullng space
只用來判定face culling
rasterization還是在screen space填充
備註:其實OpenGL不用 這樣一來 DirectX和OpenGL都是逆時鐘,看得到三角形 而Vulkan是順時鐘,看不到 和結果1相符 |
結果2
在NDC延著y軸翻轉
順時針,所以不是這裡 |
別忘了逆定順時鐘、逆時鐘的座標系 所以Vulkan在Screen Spcae是順時鐘 Vulkan在face culling space是逆時鐘 所以結果2看的到 |
這是一個負負得正的結果
結果3
我們真的去fit這種奇怪的NDC
別忘了逆定順時鐘、逆時鐘的座標系 所以在NDC是順時鐘 |
在Screen Space也是順時鐘 在face culling space是逆時鐘 所以結果3看的到 |
參考資料
- Vulkan Tutorial - Descriptor pool and sets
- Vulkan集成:图形API坐标系对比及解决方案
- Flipping the Vulkan viewport
- VkFrontFace Manual Page
- 矩阵求三角形面积——计算机图形学中
沒有留言:
張貼留言