最近XNAいじりばっかりやっててRikoやってないな。
夏までには少なくとも1本簡単なゲーム作る目標でやってるってのもあるが。
暇があればRikoでも同時に作りたいんだがさすがにそこまではなかなか。
そんなことよりXNA。
DOFでもやってみるかと思ったんだが、ぼかしが面倒なんでミップマップを作ってごまかそうとした。
で、Texture2Dの作成時にAutoGenerateとかなんとかいうフラグを渡してやると自動生成してくれるんだが、他にGenerateMipmapとかいうメソッドがある。
これは呼んだ方がいいものやら呼ばなくて良いものやら。…って試せばいいんでやってみたらいらないのね。
OpenGLと同じ感じってことでいいのかな。BackBufferからのResolveしてるからその時点で自動生成なんだろうね。
で、XBox360でも実行してみたら、あれ? なんか全然暈けないですよ?
ミップマップが作れてないのかと思ってGenerateMipmapしてみたら…このプラットフォームではサポートされてません!
えー、そ、そんなことどこにも書いてないじゃん! というかどのCaps調べればそんなこと分かるんだよ!
そんなわけでXBox360ではミップマップの自動生成はサポートされな…ん?
ミップマップ自動生成の場合はテクスチャ作成時のレベル数は0か1を指定しなきゃならんのだよね? 1を指定してたけど0を指定したらどうなんだ…って出来たー。
そんなわけで自動生成する場合はテクスチャのレベル数に0を指定しろとな。
むしろ、これXBox360の方が正しく動いてて、うちのGeForce7600GSでは何故か上手く動いちゃってただけなんだが。
それにしても自動ミップマップ生成の場合、レベル数に0か1を指定しろってのはなんなんだろ? 1を指定できる意味がさっぱりわからない。
あー、あと意味わからんと言えば、XNAでデプステクスチャを作れる意味がわからない。
作るのは出来るんだが値が設定できないというか、描画したデプスをテクスチャに取ってくる術が無いように思える。
もちろんなんとかして作ったファイルから読んでくることは出来るかもしれんけど、あんまり嬉しくないというか。
ShadowMap描けないじゃないですか! と思ったんだがDirectXでは9からは普通は浮動小数点テクスチャでやるらしい。うーん、でもGeForceでは、少なくとも6系、7系ではそれだと不利じゃないですかねぇ。
で、DirectX9ではテクスチャからサーフェスを作ってそれを描画対象に設定してなんとかかんとかっていう方法があるらしいんだが、XNAではそれに相当する方法は無さげ。
そんなわけでしばらく探し回ったものの描画したデプスをテクスチャに拾ってくる方法は見付かりませんでした。
うーんShadowMapにGeForceの倍速デプス描画は使えないのかぁ。というより浮動小数点テクスチャ使わなきゃならんのかぁ。GeForceってやっぱりOpenGLなハードなのかねぇ。
まあそんなに浮動小数点テクスチャが嫌ならRGBAにぶち込めばいいんですがね。