2011-04-29 105 views
3

之間的混合我創建需要能夠煥發在不同程度上的iOS:光滑按鈕的圖像

diamonds

我將如何使用這些照片,使一個按鈕,自定義按鈕夜光效果當它被按下時,「發光」鑽石,並使這種光芒逐漸消退回到惰性狀態?

我想鑽出幾種不同顏色的鑽石......我希望能從這裏展示的相同圖像中產生所有不同顏色的鑽石。

我想我的頭周圍可用的基本方法,在足夠的細節,我可以看到每一個通過,並作出決定路徑採取哪些?


我糾結的努力,到目前爲止, ...(我會刪除所有這一切,或將其作爲一個解決方案展開移動到可能的幾個答案...)

我可以看到3次潛在的解決方案的路徑:

  • GL
    看起來儘管GL擁有所有的功能來獲得對進程的完全細粒度控制,但核心圖形暴露的函數非常接近,並且可以節省數百行代碼文件,這對於這樣的基本任務似乎有點荒謬。

  • 芯圖形,和芯動畫以實現共混

    chroma-key masking 文檔接着說

    任何未塗漆的樣品,如當前填充顏色或其它下方繪圖,顯示通過。

    所以我可以用色度鍵掩蓋左邊的圖像,設置{0,0,0}即黑色作爲鍵。

    這至少可以保證透明背景,現在我必須努力使它變成黃色而不是灰色。

    所以也許我可以開始,而不是爲我的圖像上下文設置一個黃色的背景顏色,然後使用一些CGContextSetBlendMode(...)在黃色上標記鑽石,然後使用色度鍵蒙版來獲得透明背景

    沒關係,這至少覆蓋越來越屏幕上

    現在我可以覆蓋在閃閃發光的圖像,使用一些混合模式的基本熄滅的形象,也許我可以保持在目前的灰度狀態,這將只是提高原來的顏色

    只有這個問題是,它是很多o f重實時混合

    因此,也許我可以預先計算動畫中的每個圖像......這看起來越來越糟糕......

  • 的Cocos2D

    如果讓我來設置混合模式爲添加劑混合,然後我可以只在複合材料用適當的Alpha設置原始圖像的發光圖像。

+0

鏈接的問題:http://stackoverflow.com/questions/5786300/ios-gles2-how-to-achieve-glow-effect – 2011-06-15 04:36:26

回答

1

通過大量文檔的挖掘後,最佳的解決方案似乎是使用芯圖形功能,以獲得源圖像到單個雙組分GL紋理,然後利用GL它們之間進行混合。

我將需要一個均勻的值glow_factor傳遞到着色器

顯而易見的解決方案似乎簡單地使用

r,g,b = in_r,g,b * { (1 - glow_factor) * inertPixel + glow_factor * shinyPixel } 

(其中inertPixel是惰性金剛石的適當的像素等)..

它看起來像我也會很好地製造我自己的閃閃發光,並將它們添加到頂部;無論其特徵顏色如何,寶石都應該閃閃發亮。

0

具有搜索這問題多一點後,我可以看到幾個解決方案

溶液A - 存儲從輝光= 0轉變爲輝光在存儲器= 1作爲60幀,然後裝入合適的每次需要時將其幀格式化爲GL紋理。

這有一個顯而易見的好處,即圖形設計師可以構建整個序列,我可以將它作爲一組PNG文件加載。

另一個優點是,這些幀就不會需要按順序播放......適當的框架可以選擇在即時

但是

,它有很多的數據發送的潛在缺陷RAM-> VRAM

這可以通過使用glTexSubImage2D來優化;幾個幀可以同時發送,然後從GL內解壓縮......實際上也許是整個序列。如果是這樣,那麼使用PVRT紋理壓縮將是有意義的。

iOS: playing a frame-by-frame greyscale animation in a custom colour

溶液B - 負載輝光= 0和輝光= 1個圖像作爲GL紋理和手動編寫着色器代碼,在輝光因子取爲均勻並進行混合

這有一個優點,它接近導線,可以用各種方式進行調整。它也將非常有效。這個優點是它是一個額外的代碼要維護。

解決方案C - 設置glBlendMode執行加法混合。
然後繪製輝光= 0圖像圖像,在每個頂點上設置例如alpha = 0.2。
然後繪製輝光= 1圖像圖像,在每個頂點上設置例如alpha = 0.8。

這有一個優勢,它可以用更通用的代碼結構來實現 - 即一個非常通用的「繪製紋理四/精靈」類。

缺點是,如果沒有某種包裝,它有點麻煩......在我的遊戲中,我有幾十顆鑽石 - 在任何時候,可能有2到3顆鑽石都會發光。所以第一遍我會渲染所有東西(只需要適當地爲發光的所有東西設置Alpha),然後在第二遍時,我可以再次用合適的Alpha繪製發光的精靈來渲染一切。


值得注意的是,如果我追求的解決方案A,這將涉及建立某種形式的實時電影播放器​​對象,這可能是一個非常有用的可重用代碼組件。

+0

你用什麼框架解決方案C? – 2012-07-19 09:08:55