Urho3D - Documentation(1)
まずですね、「Urho3D」で検索しても、使えそうな日本語サイトはない。Urho3D(C++)のC#バインディングの「UrhoSharp」なら日本語のサイトは多少あるけど、まぁ使えそうなものはない。
ゲームエンジンっ言われてるけど、GUIのエディタがあるわけではない(質素なSceneエディタみたいなのはある)。
MITライセンスで、まぁCocos2d-Xみたいな感じかな。
とりあえず、Githubのページ見てく。
Urho3Dとは、クロスプラットフォーム、2D、3D、C++で実装、OGREとHorde3Dにインスパイアされてるゲームエンジン。
で、まぁざーっと読んでいって。で、UrhoのGithubのホームページに、About,News,Resources,Wiki,Discussion,Downloadって項目があるけど、ResourceのDocumentationに欲しい情報が載ってる。
Overall structure
まずソースのフォルダ、
Container | 独自のSTLとスマートポインタ |
Math | 交差テストで使われるベクトル、行列、クォータニオン、ジオメトリシェイプ |
Core | 実行Context、ベースクラスObject(型付きオブジェクト、オブジェクトファクトリ、イベントハンドル、スレッド、プロファイル) |
IO | ファイルシステムへのアクセス、ioストリームとロギング |
Resource | たぶんリソースの管理 |
Graphics | アプリケーションウィンドウのハンドリングと3Dレンダリングの機能 |
Input | ポーリングモードとイベントベースモードの両方で入力デバイスにアクセス |
Network | クラサバネットワーキング機能 |
Audio | オーディオサブシステムと.wavと.oggサウンドの再生 |
UI | GUI要素 |
Physics | 物理シミュレーション |
Navigation | ナビゲーションメッシュの生成と経路探索 |
Urho2D | 3Dシーンに統合された2Dレンダリングコンポーネント |
Script | AngelScript言語を使用したスクリプトサポート |
Engine | 上記のモジュールからサブシステムをインスタンス化し(アプリケーションでインスタンス化する必要のあるスクリプトを除く)、メインループの繰り返しを管理します。 |
Execution context
ContextオブジェクトがUrho3Dの心臓で、いっつも初めに作られて最後にデリートされなアカン。
Object基本クラスから派生してるすべての重要なオブジェクト(シーンノードとか、テクスチャとかモデルみたいなリソースとか、サブシステム)はコンストラクタでContextポインタが必要
Conventions
これ面白い。 左手座標系。時計回りが正。角度はDegree。音量は0~1。クラスのパブリックAPIでは可能な限り生ポインタが使われる、これで簡単にスクリプトにクラスと関数を公開できるし、SharedPtrとWeakPtrが侵入参照カウントを使うから比較的安全。。C++例外処理はなし、スクリプト例外処理は他に手段がないときだけ使われる。ThirdPartyのライブラリはUrhoが公開するAPIからは完全に隠されてる。
Coding convenctions
これめっちゃおもしろい。やっぱ、こういうのもちゃんと決めて実装してたりするんだね。 インデントはAllmanスタイル。タブは使わずにスペース4つ。クラスと構造体名はアッパーキャメルケースで名詞。関数名もアッパーキャメルケース。変数名はロワーキャメルケース。メンバ変数にはアンダースコアがついてる。定数と列挙子は大文字。ポインタとリファレンスの記号は型名にスペース空けずにひっつける。NULLは使わずに0を使う。クラスを定義するときの順序はまずpublicのコンストラクタ,デストラクタ、publicの仮想関数、publicの関数、publicのstatic関数、publicのメンバ変数、publicのstatic変数、でそのあとに、protected、finally、privateを繰り返す。ヘッダファイルは///で始まる一行コメント(Doxygen用)。Inline関数はできるだけ使わずにクラス定義内で定義。
だいたい俯瞰できた。
あとはAtomicの方見ながら、適宜こっち覗けばええでしょ。