Direct3D與OpenGL的Viewport差異
前言
Direct3D與OpenGL的Viewport雖然在程式上使用差不多的參數,但實際上卻有相當多的差異,這裡做個紀錄。內容
Direct3D與OpenGL的Viewport用來的差異有單個/多個Viewport、坐標系的不同與視窗的解析度認定不同。單個/多個Viewport的部分,Direct3D透過RSSetViewports()來決定Viewport的數量,但OpenGL就比較麻煩,舊有的glViewport()只能有一個Viewport,如果要多個Viewport的話,要透過glViewportArray(),但這是OpenGL4才有的。
坐標系的不同的部分,如下圖
坐標系的差異 |
視窗的解析度認定不同的部分比較不好懂,如果用的是RenderTarget來繪圖的話,用起來沒差,但如果是用在輸出到視窗的時候就有差別,Direct3D的IDXGISwapChain在建立時會需要解析度,這解析度的指的是原生的解析度,而不是視窗的解析度,當視窗被縮放時,Viewport所認定解析度會是原生的解析度!但在OpenGL則不一樣,當視窗被縮放時,Viewport的解析度會跟隨著目前視窗大小改變。這裡舉個例子,假設視窗原本為1280*720,且初始化時也依據這個解析度做初始化,所以Viewport的參數就是(0,0,1280,720),不論是Direct3D或OpenGL皆是如此,但當視窗按下放大最大被縮放成1920*1080時,這個時候Direct3D的Viewport參數依舊是(0,0,1280,720),但OpenGL的Viewport參數則變成(0,0,1920,1080)。
參考內容
glViewportglViewportArray
RSSetViewports
沒有留言:
張貼留言