1

私は一般的に 3D グラフィックスの初心者であり、iPhone 用の 3D ゲームを作成しようとしています。より具体的には、透明度を含むテクスチャを使用しようとしています。テクスチャ (8 ビットの .png ファイル) を OpenGL にロードし、それを正方形 (三角形のストリップから作成) にマップすることはできますが、シミュレーターでアプリを実行すると、画像の透明な部分が透明になりません。設定されているものに関係なく、背景色を引き継ぎますが、遠くにある画像は不明瞭になります。私は新しいユーザーであるため、スクリーンショットを投稿することができません。別の方法でアップロードしてリンクしようとします。

さらに厄介なのは、画像を A​​pple の GLSprite サンプル コードにロードすると、思いどおりに動作することです。コードを GLSprite の setupView からプロジェクトにコピーしましたが、まだ正しく動作しません。

私はブレンド機能を使用しています:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

これは私がやりたいことに対して正しいという印象を受けました。

ここで欠けている非常に基本的なものはありますか? 私はこれを数週間でコースワークプロジェクトとして提出しており、うまくいきたいと思っているので、どんな助けでも大歓迎です.

4

1 に答える 1

0

これを分解してみましょう:

まず、透明なオブジェクトが描画されます。

この時点で、次の 2 つのことが起こります。

  • ピクセルはバック バッファーに正しく描画されます
  • 深度バッファ ピクセルは、深度バッファに設定されます。深度バッファはオブジェクト全体に値を書き込み、透明度は影響しないことに注意してください。

次に、透明なオブジェクトの背後にある他のオブジェクトを描画します。 ただし、これらのオブジェクトのピクセルは、深度バッファーの値が既に描画されている値よりも小さいため、描画されません。

この問題の解決策は、シーンを後ろから前に描くことです (遠くのものか​​ら描き始めます)。

それが役立つことを願っています。

編集:ここで深度バッファを使用していると仮定しています。これが正しくない場合は、別の回答を書くことを検討します。

于 2010-10-21T10:57:13.013 に答える