2018年1月22日 星期一

關於UNPACK_FLIP_Y_WEBGL的作用

關於UNPACK_FLIP_Y_WEBGL的作用

前言

  在webgl創建texture時會有一個特別的參數,就是"UNPACK_FLIP_Y_WEBGL",本以為設了這個參數以後,就能順利的把ST座標改成UV座標,但事情並沒有想像中的美好。


內容

  UNPACK_FLIP_Y_WEBGL確實可以做出像是把ST座標轉成UV座標的效果,但這個方法有缺陷,就是在render to texture的時候,就算在那張texture創建時設定 UNPACK_FLIP_Y_WEBGL,結果該張texture用UV座標來顯示時會變成上下顛倒的狀況,也就是說render to texture時是強制使用ST座標。後來查了webgl的規格,裡面有如下內容
UNPACK_FLIP_Y_WEBGL of type boolean
If set, then during any subsequent calls to texImage2D or texSubImage2D, the source data is flipped along the vertical axis, so that conceptually the last row is the first one transferred. The initial value is false. Any non-zero value is interpreted as true.

意思是說只對texImage2D或texSubImage2D的來源資料做上下顛倒的動作,所以它並不是在任何時候都有效!


後記

  如果想在webgl使用UV座標的話,不能只靠UNPACK_FLIP_Y_WEBGL,在render to texture時要動手腳(在vertex shader轉換座標),不然也可以在mesh輸入時就做轉換,這樣連設UNPACK_FLIP_Y_WEBGL都免了。

參考資料

WebGL Specification

沒有留言:

張貼留言