DirectX vs OpenGL テクスチャ編


DirectXとOpenGLとでテクスチャに関していろいろと違うので
ここでそれらについて書いてみたいと思います。

用語

DirectXでは、テクスチャアドレッシングモードとテクスチャラッピングモードがあります。
OpenGLでは、テクスチャラッピングモード だけです。

しかも両者でそれぞれの言葉が意味しているものがずれており、
DirectX::アドレッシングモード = OpenGL::テクスチャラッピングモード
という状態となっています。
これは酷いですね。

個人的にはDirectXのアドレッシングモードという部分を廃止して、
各テクスチャの張り方を指定するラッピングモードだけに統一してほしいと思います。
円筒のUVラッピングモードってあまり使いませんし、
必要になったら通常のUVにオフセットや変換式をかませれば済むことでしょう。

設定方法について

DirectXでは、縮小フィルタ、ミップフィルタ、拡大フィルタの設定がそれぞれ設定できます。
OpenGLでは、縮小フィルタ+ミップフィルタ、拡大フィルタの2つです。

このあたり、最初はすごく困った覚えがあります。
DirextXの縮小フィルタ=D3DTEXF_POINT, ミップフィルタ=D3DTEXF_NONE
これが、
OpenGLだと GL_NEAREST_MIPMAP_NEAREST になるとか。

また、OpenGLではテクスチャフィルタの設定もきちんとやらないと
テクスチャが使用可能にならない点も注意しなくてはなりません。

RADEON HDについて

そして、RADEON HDとCatalyst 10.7の(少なくとも)組み合わせでは
glTexImage2Dをすべてやり終えた後で、テクスチャフィルタの設定を行う必要があります。

赤本の通りのコードでも実は動かないという可能性があるので、注意が必要です。
もしかしたらシェーダー使わずに、固定機能だけで完結させるならば
このトリックは必要ないかもしれません。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする


コメント

  1. しゅんぼー より:

    ここ2週間ほど、Unityに浮気しててDirectXとOpenGLに関して離れていました(汗
    まとめてくださりありがとうございました!! 丁度テクスチャまわりに手をつけていたので、参考になりました!!