Más contenido relacionado
La actualidad más candente (19)
Similar a Doom3 commentary (20)
Doom3 commentary
- 4. アジェンダ
• Doom3ゲーム概要
• Doom3コード概要
• idLib
• エンティティ
• カスタムRTTI
• イベントシステム
• まとめ
- 5. Doom3とは?
• id softwareが開発したFPS
• 2004/8発売
• マルチプラットフォーム(Windows、Mac、
Linux)
• メインプログラマはJohn Carmack
• 2011/10にソースコードが公開された
https://github.com/TTimo/doom3.gpl
- 6. Doom3の特徴
• 狭い通路
• 懐中電灯と武器を切り替えるスタイル
• ステンシルシャドウ
• いくつかのカットシーン
• スクリプトドリブンのレベルデザイン
• コンソールウィンドウによるパラメータ
調整
→idの伝統
- 7. John Carmack
• id Software設立者の一人で、
FPSの生みの親
• wolfenstein、Doom、Quake、
Rageなど数々のゲームを開発
• id Softwareのゲームはほとん
どJohn Carmackが一人で書い
ていると言われている
- 9. コーディングスタイル
• C++
• stl、boostは不使用
• 例外、標準RTTIは不使用
• シンプルなテンプレート
→2004年のコンパイラ事情や、John Carmackが書
いたコードということで、移植性と処理速度を
重視していると思われる(なにしろDoomを書いた
プログラマーであり…そもそもQuake3まではC言
語だった)
- 13. idLib
• ハッシュ(CRC32,MD4,MD5)
• テキスト(CmdArgs,Base64)
• コンテナ(2分探索,btree,ハッシュテーブル,
リスト,リンクリスト,キュー,スタック,文字
列リスト, Vector Set …)
→STLの代わり
- 14. 数学
• ベクトル
• 行列
• 角度
• クォオータニオン
• 複素数
• 乱数(線形合同法)
• Lcp(Box Constrained Mixed Linear Complementarity
Problem solver)
• Polynormal(Polynomial of arbitrary degree with real
coefficients)
- 15. ジオメトリ
• DrawVert
• JointTransform
• Surface
• Surface_Patch(Bezier patch surface)
• Surface_Polytope(多面体)
• Surface_SweptSpline
• TraceModel(コリジョン用モデル)
• Winding(任意凸形状)
• Winding2D
- 18. プリュッカー座標系
• a way to assign six homogenous coordinates
to each line in projective 3-space(wikipedia)ら
しいですが、詳細は理解していません。
• 衝突判定に6次元座標を使う?
- 24. アジェンダ
• Doom3ゲーム概要
• Doom3コード概要
• idLib
• エンティティ
• カスタムRTTI
• イベントシステム
• まとめ
- 25. エンティティ
• ゲームオブジェクトはエンティティと呼ばれ、以下の種類が
ある
• idAnimatedEntity(アニメーションするもの。ActorやPlayer)
• idTestModel
• idEntityFx
• idAFAttachment(Articulated figure:多関節形状)
• idAFEntity_Generic
• idCursor3D
• idWeapon(武器)
• idLight(光源)
• idBeam
• idFuncEmitter
• …
- 32. idClassイベント関連
• PostEventMS( const idEventDef *ev, int time )
• PostEventSec( const idEventDef *ev, float time )
• ProcessEvent( const idEventDef *ev )
→各種イベント(関数ポインタ)の実行。後述
- 35. idEntity
• 様々な処理が集まっている
• thinking(物理更新やUpdate処理など)
• visuals(描画処理)
• animation
• sound
• entity binding(エンティティの親子関係)
• physics
• damage(体力を減らしたり)
• scripting(スクリプトの処理、シグナル管理)
• gui(GUIに命令を出す)
• targets(別のエンティティのシグナルを送る)
- 40. idGameLocal
• 様々なモジュールの集合クラス
• Entity(全エンティティの管理)
• Random
• Program(スクリプト)
• Clipping
• Physics
• PVS(potential visible set)
• MultiPlayerGame
• SmokeParticles
• カメラ
• ゲームの種類などの汎用情報
• …
- 41. idGameLocal
• 様々なメソッドを持つ
• Entityの出現、削除、検索
• ネットワーク対戦情報
• セーブ、ロード
• ユーザー情報
• Draw
• ゲームのリセット
• Printf
• マップのロード
• AAS(area system)
- 42. エンティティの検索
• 名前で検索
const char * name;
idEntity* ent = gameLocal.FindEntity( name );
• Key Value Dictionaryで検索
const char * key;
gameLocal.GetTargets(Key Value Dictionary, Entity, key );
- 45. アジェンダ
• Doom3ゲーム概要
• Doom3コード概要
• idLib
• エンティティ
• カスタムRTTI
• イベントシステム
• まとめ
- 48. イベントの登録
• 各種エンティティの先頭でidEventDefを宣
言 idEventDef EV_Weapon_Next( "nextWeapon" );
const
…
• その後マクロで関数をイベントに登録す
CLASS_DECLARATION( idAnimatedEntity, idWeapon )
る
EVENT( EV_Weapon_Next,idWeapon::Event_Next )
END_CLASS
- 51. スクリプトからのイベント呼び
出し
• スクリプトからidInterpreter::CallEventでイ
ベントを呼べる
• idWeapon::Event_Clearといったメソッドを
直接呼び出さないでイベントを経由して
いるのはスクリプトのため?
- 53. 解説していないコード
• スクリプトコンパイラ
• ファイルシステム
• 物理
• アニメーション
• Dedicated Server
• 描画(renderEntity,qgl)
• …