Suche senden
Hochladen
Doom3 commentary
•
Als PPTX, PDF herunterladen
•
6 gefällt mir
•
1,947 views
D
DADA246
Folgen
Doom3 commentary
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 55
Jetzt herunterladen
Empfohlen
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
DADA246
Hbstudy41 auto scaling
Hbstudy41 auto scaling
Fujishiro Takuya
Perlと出会い、Perlを作る
Perlと出会い、Perlを作る
goccy
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
SystemV IPC
SystemV IPC
Masami Ichikawa
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
Empfohlen
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
DADA246
Hbstudy41 auto scaling
Hbstudy41 auto scaling
Fujishiro Takuya
Perlと出会い、Perlを作る
Perlと出会い、Perlを作る
goccy
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
SystemV IPC
SystemV IPC
Masami Ichikawa
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
Free bsd jail入門
Free bsd jail入門
Tsubasa Nomura
Kubernetes in プロダクション! -- cndjp第2回
Kubernetes in プロダクション! -- cndjp第2回
Hiroshi Hayakawa
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
なおき きしだ
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
Bhyve Internals
Bhyve Internals
Takuya ASADA
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
Takuya ASADA
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
Kazuhisa Hara
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
Takuya ASADA
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
物理マシンをケチる技術
物理マシンをケチる技術
Satoshi KOBAYASHI
Bhyve code reading
Bhyve code reading
Takuya ASADA
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
Slub data structure
Slub data structure
Masami Ichikawa
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
nabe-abk
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
株式会社サードウェア
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
Component basedgameenginedesign
Component basedgameenginedesign
DADA246
Weitere ähnliche Inhalte
Was ist angesagt?
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
Free bsd jail入門
Free bsd jail入門
Tsubasa Nomura
Kubernetes in プロダクション! -- cndjp第2回
Kubernetes in プロダクション! -- cndjp第2回
Hiroshi Hayakawa
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
なおき きしだ
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
Bhyve Internals
Bhyve Internals
Takuya ASADA
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
Takuya ASADA
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
Kazuhisa Hara
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
Takuya ASADA
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
物理マシンをケチる技術
物理マシンをケチる技術
Satoshi KOBAYASHI
Bhyve code reading
Bhyve code reading
Takuya ASADA
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
Slub data structure
Slub data structure
Masami Ichikawa
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
nabe-abk
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
株式会社サードウェア
Was ist angesagt?
(19)
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
Free bsd jail入門
Free bsd jail入門
Kubernetes in プロダクション! -- cndjp第2回
Kubernetes in プロダクション! -- cndjp第2回
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
BHyVeってなんや
BHyVeってなんや
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
Bhyve Internals
Bhyve Internals
BLS署名の実装とその応用
BLS署名の実装とその応用
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
物理マシンをケチる技術
物理マシンをケチる技術
Bhyve code reading
Bhyve code reading
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Slub data structure
Slub data structure
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
Andere mochten auch
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
Component basedgameenginedesign
Component basedgameenginedesign
DADA246
ゲームオブジェクトの管理
ゲームオブジェクトの管理
Shota Homma
次の世代のインタラクティブレンダリング5つの挑戦と10の滅ぶべき技術
次の世代のインタラクティブレンダリング5つの挑戦と10の滅ぶべき技術
Masafumi Takahashi
GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Hable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr Lighting
ozlael ozlael
ゲームエンジンの中の話
ゲームエンジンの中の話
Masayoshi Kamai
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
Andere mochten auch
(11)
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
Component basedgameenginedesign
Component basedgameenginedesign
ゲームオブジェクトの管理
ゲームオブジェクトの管理
次の世代のインタラクティブレンダリング5つの挑戦と10の滅ぶべき技術
次の世代のインタラクティブレンダリング5つの挑戦と10の滅ぶべき技術
GPU最適化入門
GPU最適化入門
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
Hable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr Lighting
ゲームエンジンの中の話
ゲームエンジンの中の話
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Ähnlich wie Doom3 commentary
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
Preferred Networks
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
Yoshihisa Ozaki
cocos2d-xとCocosBuilderでゲームを作ってみよう
cocos2d-xとCocosBuilderでゲームを作ってみよう
Tomoaki Shimizu
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Using xvim with macvim
Using xvim with macvim
pebble8888
Exploring the x64
Exploring the x64
FFRI, Inc.
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
Hello, DirectCompute
Hello, DirectCompute
dasyprocta
DOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵まで
Masayuki Nakano
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータ
Takahiro Inoue
Software Development with Symfony
Software Development with Symfony
Atsuhiro Kubo
実践 NestJS
実践 NestJS
Ayumi Goto
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点
Kuniyasu Suzaki
進化するArt
進化するArt
Takuya Matsunaga
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
Masafumi Okada
[CB19] アンチウイルスをオラクルとしたWindows Defenderに対する新しい攻撃手法 by 市川遼
[CB19] アンチウイルスをオラクルとしたWindows Defenderに対する新しい攻撃手法 by 市川遼
CODE BLUE
詳解Dexファイルフォーマット
詳解Dexファイルフォーマット
Takuya Matsunaga
JSON Value into Power Automate
JSON Value into Power Automate
Tomoyuki Obi
IgGrid 入門編
IgGrid 入門編
Daizen Ikehara
Ähnlich wie Doom3 commentary
(20)
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
cocos2d-xとCocosBuilderでゲームを作ってみよう
cocos2d-xとCocosBuilderでゲームを作ってみよう
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Using xvim with macvim
Using xvim with macvim
Exploring the x64
Exploring the x64
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
Hello, DirectCompute
Hello, DirectCompute
DOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵まで
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータ
Software Development with Symfony
Software Development with Symfony
実践 NestJS
実践 NestJS
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点
進化するArt
進化するArt
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
[CB19] アンチウイルスをオラクルとしたWindows Defenderに対する新しい攻撃手法 by 市川遼
[CB19] アンチウイルスをオラクルとしたWindows Defenderに対する新しい攻撃手法 by 市川遼
詳解Dexファイルフォーマット
詳解Dexファイルフォーマット
JSON Value into Power Automate
JSON Value into Power Automate
IgGrid 入門編
IgGrid 入門編
Kürzlich hochgeladen
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Kürzlich hochgeladen
(11)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Doom3 commentary
1.
Doom3コード解説 (イベントシステムとカスタム
RTTI) @DADA246
2.
自己紹介 • 名前:多田 航@DADA246 •
ゲームプログラマやってます • 得意分野 C++,C#,GPU,javascript,PHP • 描画関係とかCIとか
3.
自己紹介 • 海外ゲーム歴 PC9801版Test Driveが最初? その後Doom、Diablo、StarCraft、
NetStorm から始まり、今ではSteam、Origin、iPhone で海外ゲームを遊んでいます 秋葉原で輸入ゲームも良く買ってます
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が一人で書い ていると言われている
8.
Doom3のコードを読んでみる • Visual Studioで開く →neodoom.sln •
Visual Studio Expressでビルドするためにはコード からATLを外す必要がある →チャレンジしてみましたがビルド出来ませんで した… • ソースコードはGPLでもテクスチャなどのリソー スは公開されていません。Doom3を買う必要が あります
9.
コーディングスタイル •
C++ • stl、boostは不使用 • 例外、標準RTTIは不使用 • シンプルなテンプレート →2004年のコンパイラ事情や、John Carmackが書 いたコードということで、移植性と処理速度を 重視していると思われる(なにしろDoomを書いた プログラマーであり…そもそもQuake3まではC言 語だった)
10.
コーディングスタイル • C++の基本を押さえた書き方 →constの徹底 →最低限のvirtual →プリコンパイル済みヘッダー →クラスの前方宣言 • レガシーな書き方も残っている →変数宣言を関数の先頭で行っている →名前空間を使っていない
11.
全体構成 • Game →機種共通コード。別 verとしてGame-d3xpが ある • DoomDll →機種依存コード。 exeが出力されるのはコ レ
12.
idLib • ゲームタイトルに依存しない処理を集めたラ
イブラリ • エンディアンスワップ • 色定義 • タイマー • Key/value dictionary • ローカライズ用辞書 • 汎用ファイルフォーマット
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
16.
ODE(常微分方程式) • Euler法 • 4次のルンゲクッタ法
17.
衝突形状 • AABB,OBB,視錐台,球 • operatorオーバーロードを活用したシンプ
ルなコード
18.
プリュッカー座標系 • a way
to assign six homogenous coordinates to each line in projective 3-space(wikipedia)ら しいですが、詳細は理解していません。 • 衝突判定に6次元座標を使う?
19.
SIMD • Simd_GenericでC++の汎用実装をしつつ、一部
関数をSIMDに置き換えている • 以下の実装がある • 3DNow! • AltiVec • MMX • SSE • SSE2 • SSE3(2004年 Doom3発売年)
20.
SIMD • 処理負荷を計測する「テスト」が関数ご
と用意されている • 四則演算の他にTransformVertsなどの描画 演算や、UpSamplePCMTo44kHzなどのサウ ンド処理が実装されている
21.
アロケータ • MemoryBlock • DynamicAllocator •
ページアロケータ →大きめのメモリ確保はページ単位 小さめのメモリ確保はメモリプール (MemoryBlock)で行う
22.
TypeInfoプロジェクト • Type Info
Generator →NoGameTypeInfo.hを生成する
23.
CurlLib • Daniel StenbergのcURL(クライアントサイド
URL転送ライブラリ) • http://curl.haxx.se • ファイルシステムで使われている
24.
アジェンダ •
Doom3ゲーム概要 • Doom3コード概要 • idLib • エンティティ • カスタムRTTI • イベントシステム • まとめ
25.
エンティティ • ゲームオブジェクトはエンティティと呼ばれ、以下の種類が
ある • idAnimatedEntity(アニメーションするもの。ActorやPlayer) • idTestModel • idEntityFx • idAFAttachment(Articulated figure:多関節形状) • idAFEntity_Generic • idCursor3D • idWeapon(武器) • idLight(光源) • idBeam • idFuncEmitter • …
26.
エンティティの例 • idWeapon(武器制御) • 武器のOn/Offや、サウンド
などの他のモジュールの処 理を行っている
27.
idTypeInfo • カスタムRTTI • idClassでstaticな情報を扱うために存在する •
他のクラスからは直接触られず、idClass経由 で利用される
28.
idTypeInfo主なフィールド • クラス名 →文字列版とint版が用意されている →int版は通信対戦時のパケットに使う • 継承元のクラス名 •
イベント(メソッドを関数ポインタにしたもの。 後述) • セーブ、ロード時に使う関数ポインタ
29.
idTypeInfoの使い道 • クラス名の管理 →クラス名からインスタンスを生成する →デバッグ表示、エラー表示にクラス名を入 れる • 他のクラスと基底クラスが同じかどうか判
別 • イベントの管理
30.
idClass • idTypeInfoをstaticで所持している • イベントを実行する •
セーブ、ロードもある
31.
idClass主なメソッド • CreateInstance • GetClassname •
ListClasses_f → “Classname”, “Superclass”, “Type”, “Subclasses” の表示 • Spawn →エンティティ出現時に呼ばれる
32.
idClassイベント関連 • PostEventMS( const
idEventDef *ev, int time ) • PostEventSec( const idEventDef *ev, float time ) • ProcessEvent( const idEventDef *ev ) →各種イベント(関数ポインタ)の実行。後述
33.
idClass staticフィールド • static
int idClass::memused →クラスインスタンスの総メモリ使用量 • static int idClass::numobjects →クラスインスタンスの総数
34.
フィールド初期化忘れ対策 • idClass::CreateInstance →newするときにメモリ領域に0xcdcdcdcdを書い ておく →コンストラクタが走った後、メモリ領域に 0xcdcdcdcdがあるかどうかを調べて、フィール ドの初期化忘れを見つける Debugビルドでのみ上記チェックを行う
35.
idEntity • 様々な処理が集まっている •
thinking(物理更新やUpdate処理など) • visuals(描画処理) • animation • sound • entity binding(エンティティの親子関係) • physics • damage(体力を減らしたり) • scripting(スクリプトの処理、シグナル管理) • gui(GUIに命令を出す) • targets(別のエンティティのシグナルを送る)
36.
idAnimatedEntity • idEntityにアニメーション(idAnimator)を加
えたもの • idAnimator →複数チャンネルのモーションブレンドや、 親子構造が書いてあるが、詳細は割愛
37.
おさらい • idWeapon
38.
他のエンティティ • idLight(光源制御クラス) • 光源の方向や色を保持している •
On/Offやフェードも出来る • クラス階層がシンプル
39.
エンティティの一括管理 • エンティティはidGameLocalで一括管理さ
れている • idGameLocalでは全エンティティを所持す る他、エンティティの作成、削除、検索 ができる
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 );
43.
エンティティの検索 • クリッピング結果の取得 trace_t tr;//トレース結果用変数 gameLocal.clip.TracePoint(
tr,線分の開始地点,線分の終了地点, …); idEntity* ent = gameLocal.GetTraceEntity( tr );//エンティティの取得 ent->Signal( SIG_TOUCH );//シグナルの発行 ent->ProcessEvent( &EV_Touch, …);//イベントの実行
44.
エンティティ生成 • idTypeInfoで型指定してエンティティを生
成できる worldModel = static_cast< idAnimatedEntity * > ( gameLocal.SpawnEntityType( idAnimatedEntity::Type, NULL ) );
45.
アジェンダ •
Doom3ゲーム概要 • Doom3コード概要 • idLib • エンティティ • カスタムRTTI • イベントシステム • まとめ
46.
イベントシステム • C++の関数をスクリプトから呼ぶためのも
の • idEventとidEventDefで構成されている
47.
イベントを使った処理 • idWeaponで直接関数を呼
ばずにイベント (idClass::ProcessEvent)を経 由している
48.
イベントの登録 • 各種エンティティの先頭でidEventDefを宣
言 idEventDef EV_Weapon_Next( "nextWeapon" ); const … • その後マクロで関数をイベントに登録す CLASS_DECLARATION( idAnimatedEntity, idWeapon ) る EVENT( EV_Weapon_Next,idWeapon::Event_Next ) END_CLASS
49.
イベントの呼び出し • idClass::ProcessEventを呼ぶと、イベント登
録された関数が呼ばれる idEntity *other; other->ProcessEvent( &EV_Touch, this, &collision );
50.
スクリプト • イベントはスクリプトクラスでも使われ
ている • Script_Compiler • Script_Interpreter • Script_Program • Script_Thread
51.
スクリプトからのイベント呼び
出し • スクリプトからidInterpreter::CallEventでイ ベントを呼べる • idWeapon::Event_Clearといったメソッドを 直接呼び出さないでイベントを経由して いるのはスクリプトのため?
52.
まとめ • Doom3を読んでみました • 海外ゲームの基礎システムに興味を持って
頂ければ幸いです
53.
解説していないコード •
スクリプトコンパイラ • ファイルシステム • 物理 • アニメーション • Dedicated Server • 描画(renderEntity,qgl) • …
54.
Question?
55.
ご清聴ありがとうございました
Jetzt herunterladen