D言語でD言語くんを描く
D言語くんACが盛況でしたが、D言語でD言語くんを描画した人があまりいなかったようなので、やってみました。
ソースコード
コンセプト
Blenderで作ったD言語くんのモデルデータを読み込んでGLSLで表示しています。
ライブラリは以下を使用しました。
- SDL2(derelict)
- OpenGL3(derelict)
- Assimp3(derelict)
- gl3n(線形代数計算用)
言い訳
いろいろあって年明けまで引っ張ってしまいました。ごめんなさい。
あと、ボーン変形アニメーションもAssimpで読めているので技術的にはできるはずなのですが、実装にはまだまだ時間が掛かりそうなので諦めました。
プロジェクト名がDDoomとなっているのは、本当はD言語くんが敵キャラとして出てきてプレーヤーを瞬殺するDoomクローンにしたかったためです。
(D言語くんは穴が空いていて当たり判定が無いので、FPSでは最強だと思われます)
感想など
Assimpが思いのほか使いやすかったですが、最新のBlenderのファイルの読み込みには多少不具合があるようです。
(マテリアルを複数持つメッシュがおかしくなる)
今回はobjやfbxに変換して表示しました。
D言語らしい事はあまりできていないのですが、Assimpのノードを読み込む部分でalgorithmが大活躍でした。
また、ボーン情報をOpenGLのバッファに渡す部分でstd.experimental.allocatorを使用しています。
std.allocatorがあれば一時バッファの管理が簡単にできて、ゲーム用途で役に立ちそうですね。
D言語らしくGLSLをコンパイル時に生成したり、逆にGLSLソースのuniform変数や頂点属性をパースして自動でプログラムクラスを定義できたりすると便利かもしれません。技術的には十分可能なはず。
今回でとりあえずD言語でモデルデータを表示するサンプルができたので、何か作ってみたい人は適当にいじってみてください。
参考サイト
http://www.opengl-tutorial.org/
http://ogldev.atspace.co.uk/
http://assimp.sourceforge.net/lib_html/index.html