0

OpenGL のテクスチャと画像の関係を理解するのに苦労しています。iPhone で GPU によってテクスチャがレンダリングされるときに、これらが固有のオーバーヘッドであることは理解しています。これがまさに、このオーバーヘッドを削減するためにテクスチャ アトラスとともに CCSpriteBatchNode (cocos2d) を作成する理由です。しかし、GPU はどのようにして同じテクスチャを使用して、岩、敵、ボート、さらには巨大なモンスターなどのさまざまな画像を描画できるのでしょうか? テクスチャは、画像の色要素値を格納する OpenGL バッファであると想定されていることをどこかで読みましたが、前述のように、異なる色値を持つさまざまな種類のオブジェクトが存在する可能性があるため、同じテクスチャを使用してすべてを描画するにはどうすればよいでしょうか?

テクスチャと、Illustrator で描画できる実際の画像とを区別して、テクスチャ アトラスを使用してプロジェクトにコピーすることに完全に迷っています。もう 1 つの興味深い点は、テクスチャの次元は 2 のべき乗でなければなりませんが、画像は任意の次元を持つことができるということです! テクスチャとは何か、画像とどのように違うのか、正確に教えてもらえますか? ありがとうございました。

4

1 に答える 1

1

CCSpriteBatchNode を使用し、1 つのテクスチャを使用して異なるものを描画することについて。複数の画像を組み合わせて 1 つのテクスチャ アトラスにすることができます。1つのファイルに対して、すべての画像を含む1つのテクスチャが作成され、すべてのスプライト(あなたが言うように、岩、敵など)は、異なるテクスチャ座標を使用して、テクスチャ全体ではなく一部のみを描画しますテクスチャ。

描画呼び出しの数を減らすだけでなく、fps レートを向上させるのに役立ちます。また、アプリケーションのメモリを節約し、一度により多くの画像をロードするのにも役立ちます。これはあなたの 2 番目の質問についてです。

はい。メモリ テクスチャに読み込まれるサイズは 2 の累乗になります。そのため、画像から、実際のサイズが 64x64 の場合は同じサイズのテクスチャが作成されますが、サイズが 65x65 の画像の場合、サイズが 128x128 のテクスチャが作成されます。メモリ使用量が増加します。テクスチャ アトラスを作成すると、さまざまなサイズの多数の画像を 1 つの巨大なテクスチャ アトラス (たとえば 2048x2048) に組み合わせることができます。作成されたテクスチャは同じサイズになり、すべての画像 (フレーム) が含まれるため、CCSpriteBatchNode で使用してドロー コールの数を減らすことができます。

于 2012-11-29T07:06:58.053 に答える