「霧の中の穴」効果を作成しようとしています。特定の領域が表示されていないことを示すために使用する「霧」テクスチャがある背景グリッド画像が重なっています。現在表示されている領域を示す「霧」からチャンクを切り取ろうとしています。画面から霧の一部を「マスク」しようとしています。
私が求めているものを説明するのに役立ついくつかの画像を作成しました:
背景:
「マスク画像」(完全な透明度は、使用する目的のために外側の縁ではなく内側にある必要があります):
霧(申し訳ありませんが、見にくいです..ほとんど透明です):
最終製品として欲しいもの:
私が試してみました:
- Stencil-Buffer: 1 つの事実を除いて、これは完全に機能しました...「マスク」イメージのフェード透明度を保持する方法を理解できませんでした。
- glBlendFunc: さまざまなバージョンのパラメーターと、それを使用する他の多くのメソッド (glColorMask、glBlendEquation、glBlendFuncSeparate) を試しました。この Web サイトで見つけたいくつかのパラメーターを使用することから始めました。「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.
(もっと多くのコードを投稿したかったのですが、多くのことを試した後、古いコードが非常に雑然としていたので削除し始めました (ブロックコメントで「バックアップ」しました))