2018年3月12日 星期一

Viewport與Scissor

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的區域。

沒有留言:

張貼留言