2013年07月15日
川俣晶の縁側ソフトウェア技術雑記 total 6118 count

3Dプログラミング遊びの顛末

Written By: 川俣 晶連絡先

「まあ、それほど多くないポリゴンを組みたてて眺められれば良い、と思って気軽にテストプログラムを組み始めたがこれが難物」

「どんな内容?」

「数個のポリゴンがグルグル回れば良いと思った。で、実はVisual Studio 2012でC++のDirect3Dアプリを作成すると何もせずとも最初から実現されている」

「それでいいじゃん」

「ところが、C#で書きたいです、と言った瞬間に泥沼」

「は?」

「Visual Studio 2012にDirextXのC#サポートは一切ない」

「えー。C++はあるのに?」

「そうだ」

「昔はC#で使うライブラリがあったじゃん」

「そうだね。でも今は無い」

「じゃあどうするんだよ」

「SlimDXというライブラリが、目的の機能を持っていると分かった」

「C#でDirect3D使えるわけだね」

「そうだ。しかし、これも上手く行かないことだらけで、途方に暮れてしまった」

「なんで上手く行かないの?」

「つまりね。単なるラッパで、Direct3Dをかなり分かっていないと扱いきれないのだ。かといって、世の中にあるサンプルソースの大多数はC++用でSlimDX用ではない。SlimDX用に手直ししたくても対応関係が分かりにくい。そもそもOSSのお約束通り、サンプルソースもドキュメントも大幅に足りない」

「それで降参したんだね?」

「ははは。まさか」

「まさか……」

「結局、Visual Studio 2012は妥協して、Visual Studio 2010でもいいや、と思った瞬間にXNA4.0が使えるようになり、その上以下の状態までアッという間に行けた」

  • プログラム的なポリゴンの制御
  • カメラの位置と向きの制御
  • ライトの制御

「えー」

「XNA 4.0で行きますと言った瞬間に、ネットにはC#で書いた説明やサンプルソースがあって何も問題は無くなった。いくつかのサンプルソースを利用して、後はカスタマイズして以下のように、ライトが当たって回転する四角を見ることができたよ」

回転するキューブ

「どこをカスタマイズしたの?」

「カメラの位置とか、数値はこっちで調整した。サンプルソースにカメラの位置データが含まれていなかったので、そこは自分で数値を補って入れてみたよ」

「カメラ位置の設定数値なんて分かるの?」

「分かるよ。アプリとしての3Dソフトはそれなりに使っているから」

「じゃあ、これで君は書きたいものを書き始めることができるわけだね?」

「ははは。まさか。かなり無駄な時間を使ったので仕事に戻るよ」

「ぎゃふん」