1

ロードしている6つのテクスチャを含むGL_TEXTURE_2D_ARRAYがあるとします。

  vector<string>::iterator vsit;
  for(vsit=filenameTable.begin();vsit!=filenameTable.end();++vsit)
  {
    string filename = *vsit;
    BMPData* bmpData = LoadTextureBMPData_custom(filename);
    glTexSubImage3D(GL_TEXTURE_2D_ARRAY,0,0,0,i++,bmpData->width,bmpData->height,1,GL_BGR,GL_UNSIGNED_BYTE,(GLvoid*)&(bmpData->data[0]));
  }

このコードの前に、すべてのテクスチャにストレージを割り当てる必要があります。よく理解していれば、glTexImage3D() または glTexStorage3D() を使用してこれを行うことができます。次に例を示します。

glTexImage3D(GL_TEXTURE_2D_ARRAY,0,GL_RGB,1024,1024,filenameTable.size(),0,GL_BGR,GL_UNSIGNED_BYTE,NULL);

また

glTexStorage3D(GL_TEXTURE_2D_ARRAY,0,GL_RGB,1024,1024,filenameTable.size());

================================================== ============================ しかし、テーブル内のすべてのテクスチャにサイズを割り当てると、[幅のパラメーターのペアは 1 つしかありません。 、高さ] テクスチャの。すべてのテクスチャ イメージに別の寸法を持たせたい場合はどうすればよいですか? グラフィック エディタですべてのテクスチャを 1 つのサイズにスケーリングせずに、この問題の解決策はありますか?

もう 1 つの問題は、glTexStorage3D() が 3 番目のコード スニッパーに表示され、プログラムがクラッシュするという事実です。そこで見つけた glTexStorage3D() に関する情報:
http://www.opengl.org/wiki/Array_Texture

4

2 に答える 2

3

配列テクスチャ内のすべての画像は同じサイズです。ある構造体の C 配列を作成する場合と同様に、各構造体は同じ型 (したがって同じサイズ) でなければなりません。

于 2013-07-20T08:27:58.867 に答える
2

メモリの浪費を気にしない場合は、最大のイメージ (次元ごとに個別) を使用して TA のサイズを定義できます。を使用して、各画像を個別にレイヤーにロードできますglTexSubImage3D。ただし、テクスチャにアクセスするときに texcoords を変更する必要があるため、シェーダーは、アクセスする必要がある配列内の各画像のサイズを知る必要があります。また、組み込みのラップ機能は使用できず、シェーダーでエミュレートする必要があることにも注意してください (必要な場合)。

于 2013-07-20T13:02:12.683 に答える