0

iOS に NPOT PVR テクスチャを手動でロードしたいと思います (テクスチャを OpenGL メモリにロードするという意味ではありません。キャンバスを拡大して再度保存するために画像データにアクセスできるカスタム データ構造にロードすることを意味します)。新しい PVR)。

多くの背景テクスチャ (非 Retina ディスプレイでは 480 x 320) を持つ OpenGL iOS アプリケーションを実装しているため、私はこれを求めています。このテクスチャを NPOT PVR ファイルとして保存する予定であるため、3GS+ iPhone でメモリを節約できます。

3G- iPhone は、非 OpenGL メモリに NPOT PVR テクスチャをロードできません。私の意図は、すべての NPOT PVR テクスチャを POT PVR に変換し、アプリのキャッシュ フォルダーに保存する 3G デバイス用の前処理ステップを実装することです。

この方法で PVR を読み込んで処理することは可能ですか? たとえば、TexturePacker によって生成された PVR です。

4

2 に答える 2

1

もちろんそうだ。

  1. ファイル形式を解凍します。
  2. 生の画像データをスケーリングする
  3. 新しいスケーリングされたデータを圧縮して保存します

ステップ1については、https://github.com/Volcore/quickpvrまたはPowerVRのSDKを参照してください。

ステップ3については、PVRTC圧縮の公開されているドキュメントまたは実装はありません。したがって、いくつかのオプションがあります。class-dumpとotxの組み合わせを使用して、Appleのtexturetoolを逆コンパイルするか(推奨されません)、または(おそらくより簡単に)手順1で思いつくファイル形式の仕様に基づいて独自のエンコーダーを作成します。

ただし、状況を考えると、これはすべて前処理されたステップとして実行し、アプリに2つのバージョンのテクスチャを含めます。

于 2011-12-04T06:33:13.723 に答える
1

テクスチャを自動的に繰り返し/ラップする必要がなく、480 x 320 テクセルを 512x512 テクスチャのサブセットとして使用し、X > 480 および y > 320 の部分にアクセスしない場合は、データを再配置します。

ソース イメージを 512x512 までパディングし (一定の色を使用)、圧縮してから、テクスチャの関連部分だけを保存することをお勧めします。アプリケーションにテクスチャをロードするときは、不足している圧縮データを再パディングするだけです。(それは最も明確な説明ではないことに気づきました:-| )。

ストレージの順序を考慮する必要があることに注意してください(これはおそらく bronxbomber92 が提供したリンクに記載されています)が、もっと簡単なアプローチがあるかもしれないと思いました。圧縮されたデータは、64 ビットのチャンクに配置/インターリーブされます。ソース画像を一定の色でパディングした場合、(少なくとも IMG PVRTextool コンプレッサーを使用して) 圧縮後、同じ 64 ビット チャンクの妥当な割合 (~38%) が存在するはずです。たとえば、一連のフラグを使用して、どの 64 ビット ワードがこの「同じ」定数を使用してそのデータの格納を回避するかをマークすることができます。

于 2012-01-03T14:44:31.780 に答える