我正在編寫一個簡單的圖像查看器,用於在Android上的OpenGL ES 2.0中的幾個三角形上顯示圖像。這些圖像中有一種特定的顏色,必須用某種方式替換爲黑色。問題是,如果GL_LINEAR用於我的最小和最大化過濾器,則需要更換的顏色輪廓仍然可見。如果我使用GL_NEAREST作爲我的濾鏡,着色器可以在不太困難的情況下替換顏色,但是它不會使圖像呈現平滑,當然在放大和縮小時看起來像素化。如何從我的着色器代碼中替換紋理中的顏色?
我不知道是否有更好的方法來執行這種類型的任務。我曾經有過的一些想法是:
- 構建另一個着色器,它只在紋理像素上運行一次,並在我的片段着色器中實際使用紋理之前替換顏色?
- 重寫我的着色器,使其即使在使用GL_LINEAR時也能正常工作。
任何人都可以給我任何線索,通常如何做到這一點?我更願意在着色器中執行此操作的原因是,我可以確保蒙版像素顏色始終保持黑色。
我對OpenGL ES 2.0相當陌生,但我試圖學習如何工作。請記住這一點,並幫助我學習。提前致謝。
您目前使用的是Alpha通道,並且正在編輯源圖像的一個選項?與alpha通道相比,使用color keying可能更合適。否則我想不出有什麼更好的辦法,我想你已經勾畫出了很好的侷限性。 – Tim
編輯源圖像在Dalvik中非常耗時,我寧願沒有那種開銷。目前代碼對alpha通道沒有任何作用,但是我們顯示的圖像實際上是16位灰度,我將它編碼爲RGB_565並對着色器中的位進行解碼。這有點難看,但似乎工作。我們看到的最好結果似乎是在服務器上預處理我們的圖像,而不是試圖在客戶端上進行色彩鍵控。我們可能不得不求助於這個解決方案。 – Thorinside
我想我還可以補充說,蒙版像素不會在圖像中移動。他們都在同一個地方。我想我也可以嘗試創建一個alpha紋理,並使用它來設置輸出像素的alpha值?或者我也會在這種情況下看到這個大綱問題? – Thorinside