色々プログラムをいじってたら、いつの間にかミップマップが出来てました笑。
テクスチャオブジェクトを作成する際、MipFilterの引数を
D3DX_FILTER_NONE以外にすると正しく描画されました。
この引数、今まではレンダーステートのフィルタ指定と
同じものなのかと思ってましたが、どうやら違うようだ。。
DirectXのテクスチャ生成関数にはFilterとMipFilterの
二つの引数が用意されてますが、これらはどうもテクスチャ生成時の
補間を指定している感じです。つまり、Fileterの引数は
読み込むテクスチャが2の累乗サイズでない場合、標準の
テクスチャ生成関数では自動的に2の累乗サイズに拡大して
くれるのですが、その拡大する時のサンプリング処理の指定を
表していて、MipFilter引数も同様にミップマップ生成時の
縮小のサンプリング処理の指定を表しているのかなと思いました。
それとUsage部分にD3DUSAGE_AUTOGENMIPMAPを指定すると
なぜかテクスチャが真っ黒になります。。なのでUsageには0を指定します。
なんだかD3DUSAGE_AUTOGENMIPMAPの必要性が
分からなくなってしまいました笑。
けど、前に色々いじった時も同じような設定を試したような気がするので、
原因は此処だけでは無いかもしれません。
まぁとりあえず出来たので、良しとしよう。
で、とりあえずミップマップができたので、レンダーステートの
ミップマップ補間を色々変更して実験してみました。(画像参照)
D3DX_FILTER_POINTだとミップ境界がはっきり分かる感じでした。
D3DX_FILTER_LINEARの場合、正面方向のポリゴンだと
ほとんど気がつかなくなりますが、視線と垂直なポリゴンだと、
境界はぼやけるものの何だか妙に気になります。(画像の"さ"部分の少し左)
一応D3DTEXF_ANISOTROPICも試してみましたが。
テクスチャが大きすぎたのか、またもやミップマップ使用前と同じように
ちらつきが発生してしまいました。おまけにフィールドを移動していると
定期的にFPSがガクッと下がる問題も発生!
(おそらくミップマップ境界と関係してそうですが)
今のところ、D3DX_FILTER_LINEARが安定かな。