2012-06-02 15 views
0

在其他一些GLSL版本中,gl_BackColor似乎提供了對當前渲染片段後面顏色的訪問。這對於一些自定義alpha混合很有用。但對於webgl,glsl似乎不支持它。另一方面,讀取gl_FragColor在分配任何值之前似乎得到了正確的backColor,但只在我的Ubuntu中起作用。在我的Mac Book Pro中,它失敗了,似乎只能得到一些無用的隨機顏色。如何使用webGL glsl獲取gl_BackColor?

所以我的問題是,是否有任何直接的方式來獲得當前渲染片段後面的backColor?如果沒有,我該怎麼做?

回答

1

Nicol Bolas寫道,沒有直接的方法。

但是你可以用一種間接的方法,通過使用紋理渲染方式:

  1. 首先呈現不透明的物體(如果有的話)的幕後紋理,而不是屏幕。
  2. 將屏幕外紋理渲染到屏幕
  3. 使用執行自定義混合的着色器將透明「自定義混合」對象渲染到屏幕。 (由於您正在手動進行混合,因此不應啓用GL的混合標誌)。您應該將屏幕外紋理作爲統一的顏色添加到片段着色器中,讓您可以對背景顏色進行採樣並計算您的自定義混合。

如果您需要渲染多個透明物體,您可以使用兩個離屏紋理並在它們之間進行乒乓,最後在渲染完所有對象後將結果渲染到屏幕上。

1

在其他一些GLSL版本中,gl_BackColor似乎提供了對當前渲染片段後面顏色的訪問。

不,這從來沒有這樣。 gl_BackColor背面顏色,用於做雙面照明。並且從片段着色器可訪問從未;它是一個頂點着色器變量。

對於雙面照明,您在頂點着色器中同時寫入gl_FrontColorgl_BackColor。片段着色器的gl_Color變量被填充,其側面的顏色面向相機。所以如果三角形的背面是正向的,那麼它會得到內插的gl_BackColor

你要求的是從來沒有已在GLSL中可用。

+0

你是對的,我誤解了它。順便說一下,我正在嘗試使用webgl做2D混合工作。我需要一些自定義混合來提供更好的效果。我可以嗎? – NStal