我試圖在「霧中創建洞」效果。我有一個背景網格圖像,疊加到我有一個「霧」紋理,我用它來顯示某些區域不在視野內。我正試圖從「霧」中剪下一塊,以顯示當前正在查看的區域。我試圖「屏蔽」屏幕上的一部分霧。使用半透明紋理「掩蓋」出背景的一部分
我做了一些圖像,以幫助解釋我是什麼後:
背景:
「掩模圖像」(全透明必須是在裏面,而不是爲了外緣什麼我將用它來):
霧(對不起,很難看到..幾乎透明):
我想,作爲最終產品是什麼:
我曾嘗試:
- 模板緩衝液:我這只是一個事實完全工作..我無法弄清楚如何保留「蒙版」圖像的褪色透明度。我試過很多不同版本的參數和許多其他方法(glColorMask,glBlendEquation,glBlendFuncSeparate)我開始使用我在這個網站上找到的一些參數:here。我使用了「glBlendFunc(GL_ZERO,GL_ONE_MINUS_SRC_ALPHA);」因爲這似乎是我在尋找的東西,但是......結果發生了這樣的結果:(很難說這裏發生了什麼,但是......背景中有霧覆蓋網格。面膜是剛剛結束了作爲一個完全不透明的黑色斑點時,其應該是在霧中的透明部分
以前的一些代碼:
glEnable(GL_BLEND); // This is not really called here... It is called on the init function of the program as it is needed all the way through the rendering cycle.
renderFogTexture(delta, 0.55f); // This renders the fog texture over the background the 0.55f is the transparency of the image.
glBlendFunc(GL_ZERO, GL11.GL_ONE_MINUS_SRC_ALPHA); // This is the one I tried from one of the many website I have been to today.
renderFogCircles(delta); // This just draws one (or more) of the mask images to remove the fog in key places.
(我會發布更多的代碼但是在我嘗試了很多東西之後,我開始刪除一些舊代碼,因爲它變得非常混亂(我在塊註釋中將其備份)
如果您使用RGB混合方程(ONE_MINUS_DST_ALPHA,DST_ALPHA),並且正如您所說「alpha在我們想要看到霧的地方是0」,則結果顏色將爲((1-0) * fog_rgb + 0 * dst_rgb)。這將使霧完全不透明,不是嗎?在RGB計算中不需要使用霧層的Alpha值嗎? – Tim
雖然我即將對此進行測試,但我相信顛倒面具可能對我無效。 renderFogCircles()渲染多個圓,它們可能重疊也可能不重疊。這會不會以alpha倒置的奇怪圖形問題結束?無論如何...我會盡快測試以確保。 – Zachar543
目前的面具(但白色而不是黑色)似乎能夠產生理想的效果。在上面的面具上反轉alpha似乎給出了完全相反的效果。 (邊框是透明的)儘管如此,仍然存在一些問題......無論我用什麼透明度值,這段代碼都有可能將所有的霧都變成不透明的白色。 http://img707.imageshack.us/img707/751/screenshot2012060615012.png(我用我在其他地方使用的參數撤消上面的glBlendFunc「glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);」)霧似乎不再與背景。 – Zachar543