3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

D + SDL2 + OpenGL3 + Assimp3 でD言語くんを描く

Last updated at Posted at 2015-12-31

Screen Shot 2016-01-01 at 2.29.13 AM.png

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?