1

現時点では、このシナリオを使用して PNG から OpenGL テクスチャをロードします。

  • UIImage 経由で PNG を読み込む
  • ビットマップ コンテキストを介してピクセル データを取得する
  • ピクセルを新しい形式に再パックします (現在、RGBA8 -> RGBA4、RGB8 -> RGB565、ARM NEON 命令を使用)
  • データを使用して OpenGL テクスチャを作成する

(このアプローチは Cocos2d エンジンで一般的に使用されます)

多くの時間がかかり、ビルドごとに 1 回実行される可能性のある余分な作業を行うようです。そのため、再パックされたピクセル データをファイルに保存し、2 回目に OpenGL に直接ロードしたいと考えています。

私は実用的な利点を知っているでしょう。誰か試した?zip 経由でデータを圧縮する価値はありますか (私が知っているように、現在の iDevices はファイル アクセスにボトルネックがあります)。実際の経験を共有してくれてとても感謝しています。

4

3 に答える 3

1

さらに良いことに、これらが既存の画像である場合は、PowerVR Texture Compression (PVRTC) を使用して圧縮します。PVRTC テクスチャは直接読み込むことができ、圧縮された形式で GPU に保存されるため、さまざまな生のピクセル フォーマットよりもはるかに小さくすることができます。

このサンプル コードで、PVRTC テクスチャを圧縮して使用する方法の例を示します(テクスチャ座標はまだ修正していないため、そこでは少し混乱しています)。その例では、Apple の PVRTexture サンプル クラスを再利用して、このタイプのテクスチャを処理しています。PVRTC テクスチャは、ビルド フェーズの一部であるスクリプトを介して圧縮されるため、さまざまなソース イメージに対して自動化できます。

于 2012-04-24T17:46:01.107 に答える
0

だから、私はいくつかの成功した実験をしました:

テクスチャ データをzlib(最大圧縮率) で圧縮し、(NSDataメソッドを介して) ファイルに保存します。ファイルのサイズは、場合によっては PNG よりもはるかに小さくなります。

ロード時間に関しては、私のプロジェクトには 2 つの並列スレッドがあるため、正確なタイムスタンプを言うことはできません。1 つはバックグラウンドでテクスチャをロードし、もう 1 つはまだシーンをレンダリングしています。約2倍高速です-私見の主な理由は、画像データを再パックせずにOpengGLに直接コピーし、入力データ量を少なくすることです)。

PS: ビルドの最適化レベルは、ロード時間に非常に大きな役割を果たします: デバッグ構成では約 4 秒、リリースでは 1 秒です。

于 2012-05-03T09:49:52.160 に答える
-1

PVRTC に関するアドバイスは無視してください。色の使用が制限されている 3D テクスチャにのみ役立つということです。実際の画像から 24 または 32 BPP テクスチャを使用することをお勧めします。説明したプロセスの実際の動作例を見たい場合は、load-opengl-textures-with-alpha-channel-on-ios をご覧ください。. この例は、テクスチャ データをアプリ リソースにアタッチするときに 7zip (zip よりもはるかに優れています) で圧縮する方法を示していますが、結果は解凍され、最適な形式でディスクに保存され、それ以上のピクセルなしでビデオ カードに直接送信できます。コンポーネントの再配置。この例では POT テクスチャを使用していますが、非 POT に適応し、Apple の最適化を使用して、テクスチャ データを明示的にグラフィックス カードにコピーする必要がないようにすることはそれほど難しくありません。これらの最適化は、ビデオ データを CoreGraphics に送信するときに既に実装されています。

于 2013-06-21T03:23:57.633 に答える