2014-03-18 108 views
1

我一直在嘗試使用更復雜的着色器,並遇到頂點着色器和紋理採樣器使用的座標系問題。簡而言之:他們似乎沒有任何意義,而當試圖對它們進行測試時,我最終會得到不一致的結果。更糟糕的是,互聯網對文檔沒什麼影響,我發現的大部分信息似乎都希望我知道它是如何工作的。我希望有人可以澄清以下內容:Stage3D,AGAL - 頂點和紋理座標系

  • 頂點着色器通過表示渲染目標位置的(x,y,z)。 x,y和z的可接受值是多少?
  • x和y如何對應後緩衝區的寬度和高度(假設它是渲染目標)?
  • x和y如何對應輸出紋理的寬度和高度(假設它是渲染目標)?
  • 當x = 0和y = 0時,頂點位置在哪裏,位置方向?
  • 紋理採樣器在(u,v)座標處對紋理進行採樣。 u和v的可接受值是多少?
  • u和v如何對應被採樣紋理的寬度和高度?
  • AGAL的包裹,鉗位和重複標記如何改變採樣,以及沒有給出的默認行爲是什麼?
  • 在u = 0和v = 0採樣時,哪個像素返回位置方向?

編輯: 從我的測試中,我相信答案是:

  • 不確定
  • -1左/底,1爲右/上
  • 不確定
  • 在輸出的中心
  • 不確定
  • 0左/底,1爲右/上
  • 不確定
  • 遠左下角的紋理
+0

你是在學習這個,是爲了你自己的理解,還是爲了你可以使用Stage3D來製作一些東西? – Marty

+0

兩個!我之前使用過像素着色器,但是它們是更高級的,因此在語法上與Flash中使用的不同。如果這些問題得到解答,我應該可以毫無困難地繼續下去。 在提出這個問題之前:我不願意使用現有的引擎(Starling,Away3D等) - 我的應用程序的工作方式使得這些程序無論如何都無濟於事。 – Conduit

+0

當然,這很好。我沒有這個編程水平的大腦,所以我確實會推薦一些現有的東西:-) – Marty

回答

1
  • 您通常使用自己的座標系統,然後乘的位置每個頂點由MVP(模型 - 視圖 - 投影)矩陣組成,以獲得可作爲頂點着色器的輸出饋送到GPU的NDC座標。有一個nice article解釋了Stage3D的所有內容。
  • 正確。 z在範圍[0,1]
  • 渲染到渲染目標與渲染到背景緩衝區相同 - 從頂點着色器輸出NDC,因此紋理的實際大小是不相關的。
  • 是的,屏幕的中心。
  • 通常,它`[0,1],但可以使用該出去該範圍中,然後將輸出取決於對採樣器設置紋理渦卷模式(如重複)值。
  • (0,0)左/上,(1,1)右/下。
  • 默認一個是重複。這些模式決定了使用超出[0,1]範圍的座標進行採樣時會得到的結果。如果重複 [1.5,1.5]將導致[0.5,0.5],而如果模式設置爲clamp,將會導致[1.0,1.0]。
  • 紋理的左上角像素。
+0

感謝您在紋理採樣過程中對原點的實際位置進行了修正 - 看起來我的其他假設導致翻轉了水平通道上的所有內容!那麼重複和包裝會有什麼區別呢?如果這是重複操作的方式,他們聽起來像是會做同樣的事情。 – Conduit

+0

此外,爲了清晰起見 - 渲染到紋理時,無論紋理大小如何,頂點(-1,-1,0)都會呈現在紋理的左下角。 (1,1,0)會呈現在右上角。 – Conduit

+0

不知道,但包裝似乎是以另一個名稱重複。 – Varnius