ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

OpenGLでテクスチャマッピングする時にドハマりした話

なにがあった

ネット上のチュートリアル見ながらGLUTで立方体にテクスチャ貼り付けようとしたらどういうわけか全然テクスチャが適用されない。一体何故なのか。コレガワカラナイ。
でもよく考えると前にも似たようなことがSDL+OpenGLであったような・・・?

環境

Ubuntu 12.10とapt-getで入れたfreeglut-dev

原因

テクスチャ拡大/縮小時のフィルタの種類を設定しないとテクスチャが適用されない(!)
んなアホな。
ともかく、以下のコードをテクスチャが有効になっている時に差し込めばOK

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

第一引数の``GL_TEXTURE_2D''は使用しているテクスチャの種類に応じて変えて下さい。第三引数の``GL_LINEAR''はフィルタの種類で他にも種類があったはず。
あとはチュートリアル通り

    1. テクスチャを有効にする
    2. テクスチャをバインド
    3. GL_QUADとかの描画開始
    4. glTexCoord2d()とかとglVertex2d()とかを交互に呼び出す
    5. 描画終了
    6. テクスチャを無効に

でOK

感想

環境依存の不具合(?)なんですかね?

追記

原因は

  • デフォルトではミップマップを使うようになっている
  • なので対応するミップマップからピクセルサンプリングをしようとする
  • しかし、glTexImage2Dではミップマップが生成されない
  • 存在しないミップマップを使おうとして真っ暗に

ということみたいです。
不具合でも何でもなかった。