Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

D言語でD言語くんを描く

D言語くんACが盛況でしたが、D言語でD言語くんを描画した人があまりいなかったようなので、やってみました。

ソースコード

https://github.com/outlandkarasu/ddoom

コンセプト

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away