Viewport與Scissor
前言
這兩個功能常常被搞混,最近在做API的整合,順便把Direct3D與OpenGL的差異實驗一下,在這邊記錄下來。
內容
Viewport與Scissor的參數都是Rectangle,所以常常考混,這邊就來說說兩者的差異。Viewport的功能是把RenderSpace(寬與高都是-1~+1的空間)透過Rectangle取得實際在RenderTarget的繪製空間,具體的投射如下圖
|
Viewport的座標投射 |
Scissor的功能是定義在Rectangle內的Pixel才能被繪製,就這麼簡單,跟Viewport不同的是Scissor不用考慮RenderSpace,就只是把在Rectangle內Pixel留下來,所以Scissor無法做到畫面比例的調整。
在來說說這兩個功能在Direct3D與OpenGL的差異。在Rectangle的座標是有差異的,具體的差異如下圖
|
Rectangle的座標差異 |
另一個差異在clear,Direct3D的Viewport與Scissor對clear都是無效的!也就是不論Viewport與Scissor設了什麼,clear還是清除整個RenderTarget。Opengl的Viewport也對clear無效,但
Opengl的Scissor對clear是有效的!也就是說可以利用Scissor來指定要clear的區域。
沒有留言:
張貼留言