3

ミップマップを機能させるのに苦労しています。私は OpenGL 1.1 を使用しており、glu を持っていないため、次のテクスチャ開始コードを使用しています。

  glGenTextures(1,&texname);
  glBindTexture(GL_TEXTURE_2D,texname);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST);
  w=幅;h=高さ;
  for(int i=0;i<ミップマップ;i++,w/=2,h/=2)
    glTexImage2D(GL_TEXTURE_2D,i,GL_RGBA8,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,tex[i]);

変数:

// データ型:
unsigned long int *tex[20];
int ミップマップ、幅、高さ、w、h;
Gluint texname;

texテクスチャ ミップマップ ピクセル配列のリストを保持する配列です。ミップマップは正しく処理されます (個別にテストしました)。mipmaps元の画像を 1x1 ピクセル テクスチャに縮小するミップマップの数です (元のテクスチャは 256x256 なので、コードのこの時点では 8 です)。widthheightは元のテクスチャのサイズ (256x256) です。

その結果、テクスチャを使用することさえありません。すべてが単調なグレー (ライティングによるグレー) に見えます。

私が忘れているものはありますか?この参照を確認しましたが、競合は見つかりません。

その他の詳細: 合計で、GL_DEPTH_TEST、GL_TEXTURE_2D、GL_LIGHTING、GL_CULL_FACE、GL_FOG (およびおそらく違いがない GL_LIGHT0、GL_LIGHT1) を有効にしています。また、何か関係がある場合は、Mesa 3D の OpenGL の実装 (OpenGL バージョン 1.3 に変換される Mesa バージョン 4.0) を使用しています。

編集:

問題は、GL_NEAREST_MIPMAP_NEAREST を GL_NEAREST に変更した瞬間にテクスチャが (ミップマップを使用せずに) 正常に動作することです。したがって、それが他のコードである可能性があるかどうかはわかりません-少なくとも、それ以外のコードは考えられません。

4

1 に答える 1

6

mipmaps の値は 8 です。画像は 256x256 です。したがって、9 レベルのミップマッピング (256、128、64、32、16、8、4、2、1) が必要です。どちらかが欠けていると、テクスチャが失われます。

于 2013-04-13T01:53:33.003 に答える