2

描画の不透明度が常に同じになるようにするには、どの glBlendFunc を使用すればよいですか? glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) を使用し、複数の画像を重ねて描画すると、一定数の画像の後に完全に不透明になるまで、結果はますます不透明になります。

最も近いのは、glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA) を使用することです。これは、画像が互いに重なり合っている場合に不透明度にわずかな変化がありますが、互いに重なり合っている画像の数に関係なく、一定の不透明度を維持します。

他に試してみるべきレンダー ステートはありますか? 他のアイデアはありますか?子供向けの描画アプリを作成していますが、描画した画像 (ブラシ) が背景を覆いたくないのです。

私が持っている最も近いものは次のとおりです:
ImageShask http://img43.imageshack.us/img43/5347/img0085f.png

円の重なり部分が円の中心部分と同じ色と不透明度になるようにしたいです。

cocos2d iphone v.0.99を使用しています

4

2 に答える 2

2

(透明度なしで)レンダーバッファに描画し、結果の画像をメインシーンの部分的に透明なクワッドのテクスチャとして使用します。

RBO以前のOpenGLの方法は次のとおりですが、デバイスがそれをサポートするかどうかわからない場合は、RBOを使用するように変換する必要があります。

  • 少なくとも1つのAUXバッファを備えた表示形式を選択してください
  • テクスチャIDを割り当てるglGenTextures
  • glPushAttrib(GL_COLOR_BUFFER_BIT)
  • glDrawBuffer(AUX0)は、レンダリングをオフスクリーンビットマップに転送します
  • glReadBuffer(AUX0)
  • glCopyTexSubImage2Dを使用して、画像をテクスチャに変換します
  • glPopAttrib(GL_COLOR_BUFFER_BIT)を使用して、描画バッファー設定を復元します
  • glEnable(Texture_2D)
  • glBindTexture
  • glBegin(QUADS)
  • glColor(100%RGB、部分アルファ)
  • glTexCoord(4回)
  • glVertex(4回)
  • glEnd

毎回再レンダリングしなくても、同じテクスチャを複数のフレームに再利用できる場合があることに注意してください。また、テクスチャ座標からクワッド頂点へのマッピングをクリエイティブに使用することで、回転やストレッチを行うこともできます。

于 2010-03-07T18:36:36.060 に答える
0

私はこれをやってしまった:

glAlphaFunc(GL_NOTEQUAL, 0);
[sprite1.texture setAliasTexParameters];
[sprite1 setBlendFunc: (ccBlendFunc) { GL_SRC_ALPHA, GL_ZERO }];

次に、CCRenderTexture に描画するときにアルファ テストを有効にし、ブラシ スプライトにアクセスしてからアルファ テストを無効にします。

于 2010-03-07T22:08:32.913 に答える