21
プププププププププププププププププププププ プ8プ プププププ 3D プププププププ プププププププ

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

  • Upload
    orien

  • View
    52

  • Download
    1

Embed Size (px)

DESCRIPTION

プロジェクト演習 Ⅱ インタラクティブゲーム制作. 第 8 回 はじめての 3D プログラミング 当たってる よ 編. 今日の内容. どん がら クラッシャー 当たり判定の基礎 条件分岐の嵐 配列と繰り返しもそろそろ使おうか. 今週 のプロジェクト. 授業資料ページからダウンロードします 落とした Zip ファイルを解凍して、 出てきたフォルダを好きなところに配置 今週の FKUT 更新情報 衝突判定関連の機能を追加. 今日のサンプル. 丸いのが当たります 四角いのも当たります ぶつかります. 一応プログラミング演習にあわせて自重してたんだけど. - PowerPoint PPT Presentation

Citation preview

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

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

第 8 回はじめての 3D プログラミング

当たってるよ編

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

今日の内容

• どんがらクラッシャー

–当たり判定の基礎–条件分岐の嵐–配列と繰り返しもそろそろ使おうか

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

今週のプロジェクト

• 授業資料ページからダウンロードします–落とした Zip ファイルを解凍して、

出てきたフォルダを好きなところに配置

• 今週の FKUT 更新情報–衝突判定関連の機能を追加

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

今日のサンプル

• 丸いのが当たります

• 四角いのも当たります

• ぶつかります

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

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

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

C++ での配列

• Java より簡単に扱えます– double dDs[20];–これだけで OK– fk_Vector や fkut_SphereModel とかも可

• Java よりデンジャラスです–要素数をオーバーするとどんがらクラッシュ–クラッシュしてくれる場合はまだマシで、

普通に動いてるように見えて内部では崩壊している場合も…

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

繰り返しと組み合わせるとfkut_SphereModel maru[20];for(int i = 0; i < 20; i++) {

maru[i].glMoveTo(-100.0 + i*10.0, 0.0, 0.0);maru[i].create(4, 5.0);window.entry(&maru[i]);

}

• 座標値を計算して、ずらーっと細かい物体を並べたりできます

• 共通の設定項目をまとめて書けたりします

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

どんどん使いましょう

• いっぱい敵を出したり、地形用のパーツを作るときには配列の方が便利なことが多いです

• i を座標値の計算に使うと、手間のかかる配置が楽できたり、計算式次第では美しい形ができたりします

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

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

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

衝突判定とは

• CG 上で物がぶつかっているか• どこでぶつかったか• いつぶつかったか• どのくらい位置を動かすと帳尻が合うか

• などなどを計算して求める、絶望的なまでに数学スパイラルな技術分野である

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

衝突判定用の形状

• 見た目重視で表示している形状で厳密な判定をすると、無双などはやってられないことになる

• 判定用の簡易形状を用意し、裏ではそれで計算するのがセオリー

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

球ベース判定

• 球– シンプルイズベスト– 球だけで押し通すのは厳しいが、他の判定と併用す

ることも多い– 球の中心を「点」から「線分」に拡張することによ

り、「カプセル」へと進化する• カプセル– 球よりボリュームの広いエリアをカバー– 球の弾丸貫通問題対策としても使用– ボーンのように組み合わせれば人型キャラの判定は十分作れる

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

球とカプセル

• 中心間の距離が、お互いの半径の合計より小さかったら衝突

• 球がうぞぞぞぞっと動いた軌跡

• 組み合わせて人型にしたり、弾丸貫通問題への対処に使う

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

角張り系判定

• AABB– XYZ軸に平行な直方体– 球やカプセルとの判定も可能で、その場合は裏技

を使って OBB同様の扱いができる• OBB– 自由に回転できる直方体– 角張り系判定の究極系とされる

• 凸包– 対球に関しては最強レベルの判定素材– 凸包同士や、その他の判定素材との連携が困難

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

凸包とは

• 凹んだ部位のない立体

• n 角柱、 n 角錐なども凸包に含まれる

• 点 ( 球 ) との内外判定がべらぼうに簡単– 衝突検出になると難しいが。。。

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

とりあえず

• 球と四角形で判定してみましょう• create() したもの同士はすぐ判定できま

す– sphere.checkToSphere(other_s, back);– block.checkToBlock(other_b, back);– block.checkToSphere(other_s, back);

• if(命令 == true) で Yes なら衝突しており、back に設定した fk_Vector の変数に戻しベクトルが入る

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

注意点

• あまり高速に動かしていると、貫通してしまう場合がある–速度が大きい場合は、少しずつ動かして判定

するのが吉• 物体が密集していると、押し合いへし合

いしてあらぬ方向へ押し出される–ゲームを構成する最低限の配置を工夫しよう

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

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

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

カメラを一緒に動かす

• 自分で用意した fk_Model の変数をカメラとしてセットすると、物体同様に動きをコントロールすることが可能

• キャラクターの動きと同期すれば、 FPS的な画面も作れる

• 見下ろし系のゲームの場合、 Y軸方向にも同期させると気持ち悪いので注意

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

任意軸回転

• これまでは「方向」を指定するやり方しか教えていなかった

• XYZ軸それぞれについてこのくらいの角度で!などといった姿勢の指定が可能– glAngle()

• 現在位置からここを中心に回転しろ、なんて命令も– glRotateWithVec()

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

今日の課題

• BASIC–ボンバーマン的なフィールドを作ってみよう

• ADVANCED–マリオ 64 的なフィールドを作ってみよう

• EXTREME–ブロックや球をぐいぐい押せるような

フィールドを作ってみよう ( かなり難 )