10
ププププププププ III,V ププププププププ プププププ ププププププププププ プ8プ プププププププププププププ

プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

  • Upload
    dotty

  • View
    62

  • Download
    0

Embed Size (px)

DESCRIPTION

プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース. 第 8 回 ゲームで使えるベクトル演算. 今日の資料構成. ベクトルの基礎については PDF を参照 それをゲーム的にどう使うかを PPT で解説. 今日の知識でできること. ベクトルが表しているものの区別 距離による判定 角度による判定 真横の方向をゲットできる. ごっちゃにしてませんか?. ベクトルは時と場合によって、 「座標」を表したり「方向」を表したり「移動量」を表したりと、 その意味合いが変化します - PowerPoint PPT Presentation

Citation preview

Page 1: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

プロジェクト演習 III,V<インタラクティブ・ゲーム制作>

プログラミングコース

第 8回ゲームで使えるベクトル演算

Page 2: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

今日の資料構成

• ベクトルの基礎については PDFを参照• それをゲーム的にどう使うかを PPTで解説

Page 3: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

今日の知識でできること

• ベクトルが表しているものの区別

• 距離による判定• 角度による判定

• 真横の方向をゲットできる

Page 4: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

ごっちゃにしてませんか?

• ベクトルは時と場合によって、「座標」を表したり「方向」を表したり「移動量」を表したりと、その意味合いが変化します

• fk_Modelのメンバ関数もごっちゃになる人が多いので、もう一度整理しましょう

Page 5: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

fk_Modelで扱うベクトルのセマンティクス一覧表

• セマンティクスとは– 「意味」をかっこよく言った表現

• とりあえずグローバル座標版のみ– ローカル座標はまた後ほど

• getVec()、 getUpvec()で得られる方向ベクトルは常に長さが 1である– 正規化済み

関数名 動作 得る物・与える物getPosition() 取得 座標getVec() 取得 方向getUpvec() 取得 getVec()との垂直方

向glRotate() 設定 軸を通る座標…withVec() 設定 軸を構成する座標glTranslate() 設定 移動量付きの方向glMoveTo() 設定 座標glFocus() 設定 注視する座標glVec() 設定 方向glUpvec() 設定 glVec()との垂直方向

Page 6: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

セマンティクスごとのベクトル演算結果一覧表

• 今回の資料と合わせてよく確認しておくこと

• 位置+位置はありえない– ただし、 tA+(1-t)Bの形式で表した式は線分上の任意の点を表す

– これは次回以降取り扱う

計算式 得られる物

位置+位置 Perdon?

位置 Aー位置 B Bから Aへの方向

位置 A+方向 B Aから B進んだ位置

位置 Aー方向 B Aから B戻った位置

方向 A+方向 B 合成された方向

方向 Aー方向 B 合成された方向

位置*実数 Perdon?

方向*実数 長さを実数倍した方向

Page 7: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

距離判定

• もはや言うまでもあるまい• 位置 Aー位置 Bで得られたベクトルの長さを求めて、条件判定に利用できる

• fk_Vectorでは dist()関数が利用できる– fk_Vector vecAB = posB – posA;– double distance = vecAB.dist();–こんな裏技もあるよ• (posB-posA).dist();

Page 8: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

角度判定

• プレイヤーモデルの位置 (posP)と、敵モデルの位置 (posE)と方向 (vecE)から「一定の角度内にプレイヤーが入ると追いかけてくる敵の動き」が実現できる–敵モデルから見たプレイヤーモデルへの方向を求める (vecEP = posP-posE)

–それを正規化して (vecEP.normalize())、vecEとの内積を取る

–得られた cosθの値を使って条件判定

Page 9: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

外積の使い方

• 前述した角度判定の結果が「左右どっち側に何度なのか」を調べるのに利用–実演します

• 真横の方向をゲット– glVec()^glUpvec()で右方向のベクトルが得られる

Page 10: プロジェクト演習 III,V <インタラクティブ・ゲーム制作> プログラミングコース

今日の課題

• 一定距離内に一定の角度で近づいた場合、

プレイヤーモデル (キー操作可能なモデル )を追跡してくる動きを実現せよ