1

OpenGLを使用してiPhoneグラフィックスを作成しています。私のプロジェクトの 1 つで、OpenGL のテクスチャとして使用する必要がある画像を使用する必要があります。.png画像の512 * 512サイズは一定で、背景は透明で、中央に青い太い線があります。

OpenGL でポリゴンに画像を適用すると、画像の透明部分が黒く、太い青い線がそのまま見えるようにテクスチャが表示されます。黒い部分を取り除くために、ブレンドを使用しました。

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

次に、ポリゴンのテクスチャの黒い部分が削除されます。現在、青いバンドのみが表示されています。したがって、問題は解決されます。

しかし、私はそのような画像をたくさん追加し、OpenGL で多くのオブジェクトを作成したいと考えています。それはできますが、オブジェクトに画像を追加するとフレーム レートが非常に低くなります。しかし、ブレンドをコメントアウトすると、フレームレートは正常ですが、画像は表示されません。

私は fps が良くないので、グラフィックが少し遅く、手ぶれが発生します。

そう:

1) 私の問題を解決するためにブレンド以外の方法はありますか?

2) OpenGL アプリのフレーム レートを改善するにはどうすればよいですか? グラフィックを適切に実装するには、どのような手順を踏む必要がありますか?

4

1 に答える 1

0

オブジェクトの透明な部分が必要な場合、唯一の方法は、現在バッファーにあるもの (現在行っていること) と三角形のピクセル データをブレンドすることです。通常、ソリッド テクスチャを使用する場合、三角形の新しいピクセル データは、バッファ内にあったものを上書きするだけです (より近い、つまり Z バッファである限り)。しかし、透明度を使用すると、テクスチャのその部分の透明度を調べ始め、その背後にあるものを見て、ソリッドに戻ります。次に、最終的な画像が得られるまで、透明なものの重なり合うレイヤーをすべて結合します。

透明度が必要なのは、単純な木のスプライトのようなもので、幹の側面などから「もの」を取り除くことだけである場合は、幹の形状を実際に定義するより複雑なジオメトリを提供する方がよい場合があります。透明性を気にする必要はありません。

残念ながら、FPS を高速化するためにできることはあまりないと思います。それ以外に、計算している透明度の量を削減することはできません。画像をチェックして、この画像のアルファブレンディングを有効にできるかどうかを確認する最適化を追加することさえあるかもしれません。押し通そうとしている量によっては、長い間間違った時間を節約できる場合があります。

于 2010-03-30T10:21:37.090 に答える