0

私は OpenGL のすべての機微をマスターしているわけではないので、私の質問が十分に正確でない場合は申し訳ありません

iPhoneでは、このようなテクスチャ(png画像)をロードします

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, iTextureSize.width, iTextureSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_FILTER, GL_NEAREST);

これはうまくいきますが、これは textureData のちょうど 2 倍のサイズを割り当てることに気付きました。これはミップマッピングが原因である可能性があることをフォーラムで読んだので、glTexParameteri 行にコメントしてオフにしようとしましたが、テクスチャが空白になります。

これは、表示コードでテクスチャ読み込みパラメータがオンになっていることに問題がありますか? 私の表示コードはこのようなものです

glTexCoordPointer(2, GL_FLOAT, 0, texture);
glVertexPointer(DIMENSION,  GL_SHORT,  0, iVertex);
glBindTexture(GL_TEXTURE_2D, (GLuint)textureID);
glDrawArrays(GL_TRIANGLE_FAN,  0, iVertexCount);
4

2 に答える 2

2

ミップマップを無効にしたので、テクスチャリピートを無効にしようとしましたか?

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

テクスチャの幅または高さが2の累乗ではない値である場合は、「2の累乗ではないテクスチャ」(NPOT)に分類されます。これは、iPhoneで制限付きで処理されます。以下を参照してください。

iPhoneで2の累乗以外のテクスチャにレンダリングする

于 2011-02-26T07:45:05.537 に答える
1

2 つのテクスチャ パラメータ行をコメント アウトすると、MIP マッピングが有効になります。テクスチャの 1 つのレベルのみをアップロードするため、他のすべてのレベルは空白です。そのため、その後何も表示されません。

textureData の 2 倍のサイズが割り当てられているとどのように結論付けていますか?また、これがエラーであるという結論にどのように到達しますか? 内部でメモリを割り当てる方法と、必要なものをどこにキャッシュするかは、GL ドライバ次第です。特にビデオ RAM をメイン RAM に追加している場合は、 double が正しくないと仮定する理由はありません。

さらに、MIP マップを保存すると、全体的なストレージ要件が 100% ではなく 3 分の 1 追加されます。

于 2011-02-23T17:46:22.487 に答える