2009-10-13 76 views
0

我正在開發一個簡單的2D遊戲在OpenGL ES的iPhone的顏色變化的色調。我的問題是我想使用不同的色調渲染紋理。基本上我想改變我渲染的紋理顏色的色調。只需更改glColor就行,因爲它也會影響沒有顏色的圖像部分。有任何想法嗎?的OpenGL ES - 質地

+0

你能澄清爲什麼你認爲glColor不起作用嗎?你是什​​麼意思,「這也影響了圖像的部分無顏色」 – Bahbar 2009-10-13 15:57:39

+1

我猜有一個應該留白色質地的白色部分,但隨後有質感的紅色部分是被認爲是綠色代替。在這種情況下 - 兩個單獨的透明紋理怎麼樣,一個是不應該改變的部分,一個是,你可以使用不同的glColor設置來渲染? – 2009-10-13 23:32:01

+0

大衛是對的。黑色和灰色的部分也應該保持黑色和灰色。我使用的紋理是預先呈現在3D程序中,漸變從藍色變成白色,這使得難以將它們分成兩個紋理。 – 2009-10-14 09:27:37

回答

4

感謝您的澄清,這是遠從我的初步瞭解。請注意,您提供給OpenGL ES的紋理已具有色調,所以您要求的是更改現有色調。

首先,我回答了一個問題,說:

讓我們開始需要採取什麼措施來紋理像素。由於OpenGL紋理存儲爲RGB,要轉換紋理的色調,您需要轉到RGB-> HSL->應用新的色調 - > RGB。 你可以找到實際的數學做RGB-> HSL和迴轉換here。你想如何選擇新的色調,我想你必須填寫。

最大的問題是應該轉變發生。那麼,OpenGL管道將不會讓你在閱讀紋理時進行復雜的轉換(ES 1.1中不是這樣 - -ES 2.0 fragment shaders會有幫助,但成本很高)。因此,您必須在GL ES紋理管線之外進行所有轉換。根據您需要更改色調的頻率,我的建議是在將它們加載到OpenGL ES之前按要求離線(並存儲各種主題紋理),或根據需要計算新色調的新紋理。

據我所知,GL ES 1.1沒有任何內置的工具,以幫助直接做到這一點。現在

,退後一步,我不知道什麼是防止你在2個紋理分離出,如果你可以用2個紋理住在運行時適用。我指出的數學無論紋理是如何生成的(從理論上講,色調應該是恆定的,如果我理解你的情況是正確的),它將明度與飽和度分開。在任何輸入紋理上離線執行計算都應該相當容易?