Presentation is loading. Please wait.

Presentation is loading. Please wait.

プロジェクト演習Ⅱ インタラクティブゲーム制作

Similar presentations


Presentation on theme: "プロジェクト演習Ⅱ インタラクティブゲーム制作"— Presentation transcript:

1 プロジェクト演習Ⅱ インタラクティブゲーム制作
第8回 はじめての3Dプログラミング 当たってるよ編

2 今日の内容 どんがらクラッシャー 当たり判定の基礎 条件分岐の嵐 配列と繰り返しもそろそろ使おうか

3 今週のプロジェクト 授業資料ページからダウンロードします 今週のFKUT更新情報
落としたZipファイルを解凍して、 出てきたフォルダを好きなところに配置 今週のFKUT更新情報 衝突判定関連の機能を追加

4 今日のサンプル 丸いのが当たります 四角いのも当たります ぶつかります

5 一応プログラミング演習にあわせて自重してたんだけど
配列、使えてる?大丈夫?

6 C++での配列 Javaより簡単に扱えます Javaよりデンジャラスです double dDs[20]; これだけでOK
fk_Vector や fkut_SphereModel とかも可 Javaよりデンジャラスです 要素数をオーバーするとどんがらクラッシュ クラッシュしてくれる場合はまだマシで、 普通に動いてるように見えて内部では 崩壊している場合も…

7 繰り返しと組み合わせると 座標値を計算して、 ずらーっと細かい物体を 並べたりできます 共通の設定項目をまとめて書けたりします
fkut_SphereModel maru[20]; for(int i = 0; i < 20; i++) { maru[i].glMoveTo( i*10.0, 0.0, 0.0); maru[i].create(4, 5.0); window.entry(&maru[i]); } 座標値を計算して、 ずらーっと細かい物体を 並べたりできます 共通の設定項目をまとめて書けたりします

8 どんどん使いましょう いっぱい敵を出したり、地形用のパーツを作るときには配列の方が便利なことが多いです
iを座標値の計算に使うと、手間のかかる配置が楽できたり、計算式次第では美しい形ができたりします

9 ガチ数学の世界へようこそ 当たり判定の基礎

10 衝突判定とは CG上で物がぶつかっているか どこでぶつかったか いつぶつかったか どのくらい位置を動かすと帳尻が合うか
などなどを計算して求める、絶望的な までに数学スパイラルな技術分野である

11 衝突判定用の形状 見た目重視で表示している形状で厳密な判定をすると、無双などはやってられないことになる
判定用の簡易形状を用意し、裏ではそれで計算するのがセオリー

12 球ベース判定 球 カプセル シンプルイズベスト 球だけで押し通すのは厳しいが、他の判定と併用することも多い
球の中心を「点」から「線分」に拡張することにより、「カプセル」へと進化する カプセル 球よりボリュームの広いエリアをカバー 球の弾丸貫通問題対策としても使用 ボーンのように組み合わせれば人型キャラの判定は十分作れる

13 球とカプセル 中心間の距離が、お互いの半径の合計より小さかったら衝突 球がうぞぞぞぞっと動いた軌跡
組み合わせて人型にしたり、弾丸貫通 問題への対処に使う

14 角張り系判定 AABB OBB 凸包 XYZ軸に平行な直方体 球やカプセルとの判定も可能で、その場合は裏技を使ってOBB同様の扱いができる
自由に回転できる直方体 角張り系判定の究極系とされる 凸包 対球に関しては最強レベルの判定素材 凸包同士や、その他の判定素材との連携が困難

15 凸包とは 凹んだ部位のない 立体 n角柱、n角錐なども凸包に含まれる 点(球)との内外判定がべらぼうに簡単 衝突検出になると 難しいが。。。

16 とりあえず 球と四角形で判定してみましょう create()したもの同士はすぐ判定できます
sphere.checkToSphere(other_s, back); block.checkToBlock(other_b, back); block.checkToSphere(other_s, back); if(命令 == true)でYesなら衝突しており、 backに設定したfk_Vectorの変数に 戻しベクトルが入る

17 注意点 あまり高速に動かしていると、貫通してしまう場合がある 物体が密集していると、押し合いへし合いしてあらぬ方向へ押し出される
速度が大きい場合は、少しずつ動かして判定するのが吉 物体が密集していると、押し合いへし合いしてあらぬ方向へ押し出される ゲームを構成する最低限の配置を工夫しよう

18 実演します、コードの公開はあとでね その他もろもろ

19 カメラを一緒に動かす 自分で用意したfk_Modelの変数をカメラとしてセットすると、物体同様に動きをコントロールすることが可能
キャラクターの動きと同期すれば、FPS的な画面も作れる 見下ろし系のゲームの場合、Y軸方向にも同期させると気持ち悪いので注意

20 任意軸回転 これまでは「方向」を指定するやり方しか教えていなかった XYZ軸それぞれについてこのくらいの角度で!などといった姿勢の指定が可能
glAngle() 現在位置からここを中心に回転しろ、なんて命令も glRotateWithVec()

21 今日の課題 BASIC ADVANCED EXTREME ボンバーマン的なフィールドを作ってみよう マリオ64的なフィールドを作ってみよう
ブロックや球をぐいぐい押せるような フィールドを作ってみよう(かなり難)


Download ppt "プロジェクト演習Ⅱ インタラクティブゲーム制作"

Similar presentations


Ads by Google