Hatena::ブログ(Diary)

日記名思いつかない このページをアンテナに追加 RSSフィード

2014-08-02 久しぶりに日記

D言語が素晴らしかった

ずっとOCamlで開発してきたけど、Windowsでやるにはどう考えても不利だ。

まあWindows版の放置っぷりは他の言語も似たようなもんだし、まともにWindowsネイティブで開発できるのはC/C++しかないのだろうか・・

観念してC++でちょっとColladaのリーダーを作ってみたんだが、これ以上やる気がでない。

あんな気持ち悪いのなら面倒くさくてもCで書くだろう。

もはやCでやるしかないのだろうか。。。

そんなとき、D言語を推すブログを見てそんなものもあったなあ、とD言語について勉強してみた。

D言語ではCのlibやDLL関数を直接呼べる。

昔はWindowsではlibにCOFFとかOMFとかあって単純には行かなかったんだが

最近は64bitならVCのリンカを通すのでそのまま使える!

CygwinだのMinGWみたいな気持ち悪いツールが必要ないのは素晴らしい!

ヘッダファイルみたいなインターフェースを定義する必要あるけどね。

それでも他と比べて簡単すぎんよ。

大体、インターフェースライブラリがあるので自分でやる必要はあまりなさそう。

ライバルのGo言語はCのAPI使うのはめんどくさそうだったし

rustもなんかWindows版は怪しい気がする。

こりゃどう考えてもD言語しかあるまい。


  • VisualD

VisualStudio上で動くIDEなんだが未完成臭しかしない(まだVer0.3.38だし)

VC++ビルドしたlibを参照するとわけわからんエラーでビルドできん。

エラーはDのstd.utf.UTFExceptionが投げられてるので、ビルド中にDで作られた処理が走るらしい・・・?

さすがにこれはわけわからん。


  • XamarinStudio

現状こっちだろうな。

よくわかんないけどデバッグでもブレークポイントが止まらないのでVisualDも併用しようかな。


Derelict3というSDLやらOpenGLやらODEやらゲームで使えそうなCライブラリのD用インターフェースライブラリがある。

ただ、build.dでビルドを実行できるらしいが、これで作られたlibは参照すると無効になったしまう。理由は知らない。

自分でビルドしたら上手く行った。まあ、XamarinかVisualDにファイルをぶち込んでビルドするだけだからね。

2013-06-01

3D-Coatがすごい

3D-Coatというモデリングソフトが面白すぎる。

Zbrushみたいなスカルプトなんだが、普通の3Dみたいに面の集合ではなくボクセルを操作するが面白い。

ボクセルなので好きな位置に好きなように付け足していくことができ、かなり粘土に近い感覚でモデリングすることができる。

ボクセル - Wikipedia

ボクセルってのには前から興味あった。

自前で実装するならシェーディングとかどうするのか全然わかんないけど

3Dモデルをボクセル単位で操作するってのはなんか

SFによくあるようなナノマシンプログラミングするみたいですげえ面白そうだ。

プログラミングで動的に形状をモデリングすることも可能だとしたらロマンがある。

水とか火とかの自然現象かスライムみたいな不定形のクリーチャーならいけそうな気もする。

T2みたいに体の一部を剣に変えたりするようなのならなんとかできんのかなぁ。

2013-05-05

Colladaを読み込んでみる

Colladaという3Dモデリング用フォーマットが便利そう。

Blenderからでもexportできる。

COLLADA 1.5.0

とりあえず、単純に表示するだけならgeometryタグ内のデータでいいんだろうか。

xml-lightでちまちま読み込んでいく。(F#ならなら一気にデシリアライズできてしまうだろうなぁ、)

XMLという形式は読み込みやすいがデータ型を作るのは面倒だ。

同じタグでも微妙に属性やなんかが違ったりするから

OCamlのrecordでは面倒くさすぎるのでClassを解禁してしまった。

Classを初めて使って知ったのだが、OCamlClassはダックタイピングだったんだなぁ。

動的言語みたいにメソッドの型が一致してれば突っ込むことができてしまう・・・

2013-01-14

ODEのOCamlバインディング

OCamlにはODEのライブラリはないのか・・・あった。

OCaml ODE

しかし、これのグルーコードはVC++ではコンパイルエラーだらけでまともに使えそうにない。

C言語なのにここまで互換性がないのはショッキングだな。

調べてみるとgcc拡張ってのが色々あるんだなぁ、、、

2013-01-10

物理演算エンジンに手を出してみる

物理演算エンジンを使って見ること。

比較的メジャーなものはBulletとODEだと思うが


  • Bullet

HelloWordの時点で嫌気が差してくる。

最初のサンプルからして長ったらしい名前のクラスをたくさん作らされる。

この取っ掛かりの悪さはオブジェクト指向ライブラリゆえだろうか。

何よりC++用であるというのが致命的か。C++だと他の言語(OCaml)から呼べん。

  • ODE

こっちはシンプルでいいねえ。

Cのインターフェースだし、オブジェクトの切り分け方もわかりやすいと思う。


というわけでODEを使っていく事にする。

参考になるのはここかno title


  • ODEの描画

一応DrawStuffというライブラリはあるが

視点とかカメラ操作とか固定されてる感じ。ゲームには使いにくい。あくまで簡易実験用か。

ODEではオブジェクトの見た目はジオメトリというらしい。

ジオメトリはSphereやBoxという形状が用意されている。

自分でモデリングしたものに適用したければどうすればいいのか。

no title

多分モデルの頂点情報から三角形ジオメトリを生成していけばいいんだろう。


これでもう衝突判定のことに悩まなくても済むようになればいいなぁ

モデリングデータからジオメトリを生成するようにできればいちいち考えなくてもよくなってモチベーションも上がってくる。

(パフォーマンスの問題はあるが)

Connection: close