2012-08-02 36 views

回答

1

如果您正在使用的固定功能管線(ES 1.1),你可以使用glReadPixels拉像素數據從GPU這樣你就可以直接處理它。然後,你需要創建一個從該結果引起的紋理,呈現映射到新的紋理四。但這是實現結果的一種相當低效的方式。

如果您使用的着色器(ES 2.0),就可以直接對GPU,這是更快做到這一點。這意味着,在做一個片段着色器的greyscaling中的幾個方法之一:

  1. 如果你的渲染很簡單,首先,你可以在你的正常片段着色器與添加灰度數學,也許撥動它布爾均勻變量。

  2. 如果您不想在正常的管線中弄髒灰度,可以正常渲染到屏幕外的FBO(紋理),然後使用特殊的灰度紋理着色器將該紋理的內容渲染到屏幕的FBO那對抽樣紋理像素進行數學運算。

這裏的灰度等級的數學,如果你需要它:http://www.bobpowell.net/grayscale.htm從本質上講,請將RGB值到該公式,並使用在所有的渠道所產生的亮度值。

+0

謝謝,但glReadPixels是不是一種選擇,因爲這是非常緩慢和laggy。 :(在固定管道中的其他任何其他方式? – lacas 2012-08-02 10:38:43

+0

@lacas:如果沒有着色器,唯一的辦法就是實際渲染灰度屏幕,你可能需要單獨提出一個關於場景的更多細節問題(2d?3d?lighting?等)來獲得關於如何解決問題的精明答案,但從理論上講,您可以調整所有顏色,以便只用灰色着色。 – 2012-08-02 14:13:26