敗軍の将は兵を語らず
とかいうタイトルを付けつつ、別に将でもないので語りまくる。
dxsdl2r
リポジトリはこちら。
描画系をOpenGLに書き換えた。理由はスケーリングや回転のSDL2の座標関連の扱いが気に入らなかったから。あと、3D描画を試したかったから。
ということで3D関連のクラス(Model、Material、Shader::Core3D、RenderTarget3D)を追加して、MMDのデータを読み込んで表示、モーションを再生するところまでとりあえずできた。ミクさんが動くようになった。インバースキネマティクスはできていない。
Shader関連については言語がGLSLなのが致命的に違うが、それ以外は似たような使い方ができるようになった。頑張ればなんとかなりそうな雰囲気。
2D系はちゃんと動くのかいまいち自信がない。作り直してから特に動かしてないし。
なんとなく使えるレベルのAPIにはなっている気がするので、今後いつかDXRubyに3D機能を追加するのであれば、これをベースに考えて行くことになりそうである。
ということでコードは整理できていないが、そのうち整理して上げようと思っているといつまで経っても何もしないので整理しないままアップしてやった。手元に隠しておくよりかはマシだろう。
この件で得たもの↓
・初めてOpenGLでそれなりに動くものを作った
・sdl2rでそれなりのものを作った
・mmdのファイルフォーマットやモーション再生についての理解が深まった
物理エンジン
無謀であった^p^
作ってみてわかったのは、物理や幾何学の知識だけでは開発不可能で、シミュレータ上で計算しきれない部分をどのように誤魔化していくか、どうすれば処理が軽くそれっぽい動きができるか、という部分を考える力が必要だということだ。よく考えてみればコンピュータでのシミュレーションも、リアルな描画も、そういうところの創意工夫を積み上げていった結果であり、そういう闘いなのである。
あと、Chipmunkとか使い方が若干難しいなーと思ったが、いざ自分で作ってみると、それなりに物理エンジンとしてきちんと作ろうとすればするほど、使い方は難しくなっていくということがわかった。こういうもんなのだ。であれば、Chipmunkの使い方を何かしら制限して簡単にするようなラッパを作ればよいという話であり、わざわざ自分で作るのはどうなのか、という話に行き着く。興味はあるのでいつか再開しちゃうかもしれないが。
この件で得たもの↓
・力学と幾何学の勉強になった
・世の中には賢い人がいっぱいいるということが改めてわかった
階層Sprite
DXRubyの新機能として期待の階層Spriteではあるが、Window.draw系メソッドとの兼ね合いをどうするかで悩んでいる。
すべてをSpriteで扱うことができればいいのだが、Spriteはdrawをオーバーライドすることができて、その場合に描画するのはWindow.draw系メソッドとなるので、これをどうにかしなければ階層Spriteは片手落ちと言える。とりあえず何となくどうにかできそうな案は考えてみたが、どうも扱い方が難しくなってしまい、なかなかうまいこといかない。
まあ、今まで当初想定していなかった機能を追加してきたのであちこちツギハギっぽくなってきているのかもしれない。SourceForgeで公開してから来年で10年になるわけだしな。いい加減古い。
ともあれ、階層Spriteに関してはもうちょい考えなければならないが、中途半端なものを実装するぐらいならボツにしてしまったほうがよいと考えている。ComplexSpriteみたいなものである程度は代用もできるだろうし。
これから
やってみたいことは幸いいろいろあるので、ネタに困ることはなさそうである。とはいえ形になるかどうかは全く不明というか、いままでの経歴をみるとほぼ全滅であるわけなので、今後も似たような感じになるだろう。残念な話だが。ま、趣味だし。