2

ColorSplash や iSteam などの他のアプリのようなテクスチャをマスクしようとするときの最良の選択は何ですか?

私はOPENGL ESのようなものを学び始めました... 4日前(私は完全な新人です)、次のアプローチを試しました:

1) 色付きの texture2D、最初のテクスチャのグレースケール バージョン、および mask と呼ばれる 3 番目の texture2D を作成しました。

2) ブラシ用の texture2D も作成しました...これはグレースケールで不透明です (ブラシ = 黒 = 0,0,0,1 および周囲 = 白 = 1,1,1,1)。私の意図は、エッジが滑らかなアンチエイリアスブラシを作成することでしたが、今は通常のブラシで問題ありません

3) インターネットでマスキング手法を検索したところ、このチュートリアル ZeusCMD - 設計と開発のチュートリアル : OpenGL ES プログラミング チュートリアル - マスキングに関するマスキング が見つかりました。チュートリアルでは、ブレンディングを使用してマスキングを行うように指示されています...最初に色を描画し、次にglBlendFunc(GL_DST_COLOR, GL_ZERO)でマスクし、次にglBlendFunc(GL_ONE, GL_ONE)でグレースケールします...これにより、私が望むものに近いものが得られます。 ..しかし、まさに私が欲しいものではありません。結果はマスクされていますが、何とか明るすぎます

4) マスク テクスチャに描画するために、追加のフレーム バッファ オブジェクト (FBO) を使用しました。

結果として得られる画像 (明るすぎた画像) にも、この方法で達成される速度にも満足できません。通常の方法は、グレースケール (オーバーレイ) texture2D に直接描画し、ブラシが当たる場所のアルファ チャネルのみに影響を与えることだったと思います。これを達成するための速い方法はありますか?私はたくさん検索しましたが、明確で理解しやすい答えは得られませんでした。次に、メインの描画ループで、色付きのテクスチャのみを描画し、その上にグレースケールを glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) とブレンドすることができました。

私はただ OPENGL ES の使い方を学びたいのですが、適切に動作させることができないので、気が狂ってしまいます。アドバイス、チュートリアルへのリンクをいただければ幸いです。

4

1 に答える 1

0

実際に iPhone で動作するものについては、テクスチャ コンバイナーを試してください。

これらを使用して、変換された別のアルファ テクスチャに対して RGBA テクスチャをマスクしました。
これは、ステンシル バッファーがない場合に複雑な影を生成するための
ものでしたが、状況はそれほど変わらないようです。

このリンクは、うまく機能するフラグメントシェーダーの観点からコンバイナーを説明していることに注意してください。
残念ながら、コンバイナーは対応するシェーダーよりも複雑です。

于 2009-08-06T09:16:08.853 に答える