KK PROJEKT RED 勉強ブログ

ゲーム好き技術系大学生のメモのようなもの

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の方見ながら、適宜こっち覗けばええでしょ。