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

Slides:



Advertisements
Similar presentations
プログラミング Ⅱ 第2回 第1回(プログラミングⅠの復 習) の解説. プログラムの作り方 いきなり完全版を作るのではなく,だんだ んふくらませていきます. TicTa cToe1.
Advertisements

PowerPoint 活用マニュアル スライドショーにせず、そのまま見てね。. ハイパーリンク 編.
情報基礎演習I(プログラミング) 第9回 6月22日 水曜5限 江草由佳
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
エクセル(1)の目次 起動法、ブック、シート、セル ブックの開き方 エクセル画面 マウスポインターの種類 シート数の調節 データの入力法
情報処理 第8回.
基本操作 マウス マウスの基本操作 このページは、マウスやキーボードの基本操作などについての説明をしています マウスポインタ
Microsoft PowerPoint98 Netscape Communicator 4.06[ja]
情報処理 第7回.
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
くらしのにほんご とよなか パワーポイント授業をやってみよう。」 次へ.
HSPでのミニゲーム作成 早稲田実業学校PC班 Y氏.
プロジェクト演習Ⅱ インタラクティブゲーム制作
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
VBA H106077 寺沢友宏.
プロジェクト演習Ⅱ インタラクティブゲーム制作
情報処理 第6回.
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング入門第4回 ~レゴロボットのプログラミング3~
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プログラミング演習3 第2回 GUIの復習.
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
3D散歩ゲーム 08A2043 谷口盛海 種田研究室.
情報処理 第8回.
プログラミング入門 電卓を作ろう・パートIV!!.
アルゴリズムとプログラミング (Algorithms and Programming)
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
第6回:ラケットを動かそう! (キーボードによる物体の操作)
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
単語登録(1) ◎MS-IMEの「単語登録」に、単語、語句、記号など自分がよく使うものを登録しておくと、便利である。
 情報の授業 アルゴリズムとプログラム(1) Go.Ota.
0.2 プロジェクトの準備 DXライブラリを使うための準備.
CG2 第3回 小林 学 湘南工科大学 2013年4月22日 〒 神奈川県藤沢市辻堂西海岸1-1-25
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
プログラミング入門第6回 ~レゴロボットのプログラミング6~
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プログラミングを 体験しよう 選択情報⑧.
プログラムの基本構造と 構造化チャート(PAD)
プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
C言語 はじめに 2016年 吉田研究室.
第1章 いよいよプログラミング!! ~文章の表示 printf~
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
基礎プログラミング演習 第6回.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
情報基礎演習I(プログラミング) 6月8日 水曜5限 江草由佳
プログラミング入門 電卓を作ろう・パートI!!.
本当は消去できていない!? ~データを完全消去する方法~
本当は消去できていない!? ~データを完全消去する方法~
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
ウェブデザイン演習 第6回.
自由席にしています。 資料のある席へお座りください.
自由席にしています。 資料のある席へお座りください.
アルゴリズム入門 (Ver /10/07) ・フローチャートとプログラムの基本構造 ・リスト ・合計の計算
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
スライドの終わりまでテキストが繰り返しスクロールされます • スライドの終わりまでテキストが繰り返しスクロールされます •
プロジェクト演習Ⅱ インタラクティブゲーム制作
単語登録(1) ◎MS-IMEの「単語登録」に、単語、語句、記号など自分がよく使うものを登録しておくと、便利である。
プロジェクト演習Ⅱ インタラクティブゲーム制作
専門教育入門セミナー 2016/10/31.
FK Toolkit for Visual C++2010
C言語講座 四則演算  if ,  switch 制御文.
Presentation transcript:

プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2 第3回 はじめての3Dプログラミング 条件分岐で動かそう

今日の内容 条件分岐がなくちゃはじまらない あなたについていきます 位置と姿勢の制御

今週のプロジェクト 授業資料ページからダウンロードします 落としたZipファイルを解凍して、 出てきたフォルダを好きなところに配置

今日のサンプル 基本構造自体は先週の物と大差ありません 一応車、のつもりです 今日の内容に合わせて改造していきます

メニューの数が少ない人は (Express版のみ) 「ツール→設定→上級者用の設定」を選択 Click!

行番号の出し方(1/2) 「ツール→オプション」を選択 Click!

行番号の出し方(2/2) 「テキストエディター→すべての言語→全般」を開いて「行番号」にチェックを付けて「OK」を押す ① ④ ② ③ ⑤

ゲームがゲームであるために 条件分岐で動かそう

条件分岐とは? 「もしこうならばそうしろ、 でなければああしろ」という流れ ゲームにおける条件分岐とは? 「もしこうならばそうしろ、  でなければああしろ」という流れ if文を使う(場合によってはelse ifやelseも) ゲームにおける条件分岐とは? あるキーが押されているか? 今キャラクターはどの場所にいるか? フラグは立っているか?

キーは押されているか? 以下のように入力してみよう while(window.update() == true) { // ここから入力 if(window.getSpecialKeyStatus(FK_RIGHT) == FKUT_SW_PRESS) { body.glTranslate(1.0, 0.0, 0.0); } if(window.getSpecialKeyStatus(FK_LEFT) == FKUT_SW_PRESS) { body.glTranslate(-1.0, 0.0, 0.0); // ここまで

さっきのコードの意味 if(→キーは押されているか?) { } if(←キーは押されているか?) { blockを今の位置からX方向に1.0だけ移動しろ } if(←キーは押されているか?) { blockを今の位置からX方向に-1.0だけ移動しろ

他のキーを判定したい場合 getSpecialKeyStatus(キーコード) getKeyStatus(‘調べたいキーの文字’) == キーコードは次のスライド参照 getKeyStatus(‘調べたいキーの文字’) シングルクォート(SHIFT+7)で半角文字を 1つだけ囲って指定する == FKUT_SW_PRESS(押されてる) FKUT_SW_DOWN(押された瞬間) FKUT_SW_UP(離された瞬間) FKUT_SW_RELEASE(離されてる)

条件式の書き方の基本 「左側」と「右側」が、どういう関係かを記述 今のところこの授業は「等しい場合」だけで何とかなる (A == B)等しい (A > B)AがBより大きい (A < B)AがBより小さい (A >= B)AがB以上 (A <= B)AがB以下 以上、以下は 等しい場合を含む 今のところこの授業は「等しい場合」だけで何とかなる 左側にキーの状態を引っ張ってくる命令を書き、右側にどんな状態で あって欲しいかを書く

getSpecialKeyStatus()で 使えるキーコード FK_SHIFT_R, //!< 右シフトキー FK_SHIFT_L, //!< 左シフトキー FK_CTRL_R, //!< 右コントロールキー FK_CTRL_L, //!< 左コントロールキー FK_ALT_R, //!< 右オルトキー FK_ALT_L, //!< 左オルトキー FK_ENTER, //!< エンターキー FK_BACKSPACE, //!< バックスペースキー FK_DELETE, //!< デリート(削除)キー FK_CAPS_LOCK, //!< CapsLockキー FK_TAB, //!< タブキー FK_PAGE_UP, //!< ページアップキー FK_PAGE_DOWN, //!< ページダウンキー FK_HOME, //!< ホームキー FK_END, //!< エンドキー FK_INSERT, //!< インサートキー FK_LEFT, //!< 左矢印キー FK_RIGHT, //!< 右矢印キー FK_UP, //!< 上矢印キー FK_DOWN, //!< 下矢印キー FK_F1, //!< F1 キー FK_F2, //!< F2 キー FK_F3, //!< F3 キー FK_F4, //!< F4 キー FK_F5, //!< F5 キー FK_F6, //!< F6 キー FK_F7, //!< F7 キー FK_F8, //!< F8 キー FK_F9, //!< F9 キー FK_F10, //!< F10キー FK_F11, //!< F11キー FK_F12 //!< F12キー

「瞬間」ってどういうこと? ゲームプログラムは 回っている それはすごい勢いで

一般的なプログラムの場合 計算はじめまーす 入力値とかとってきまーす 足したり引いたりしまーす 答え出ちゃったから出しまーす おしまーい、あはははーっ 開始 入力 計算 出力 終了

ここに膨大な量の条件分岐がはさまると思え ゲームの場合はこうだ 開始 表示するものの準備 画面の表示(描画) [条件によって] 物体を動かす [条件によって] カメラとかも動かす [条件によって] 色々動かす 画面の表示に戻る ウィンドウが閉じられたら終了 準備 No ウィンドウ 閉じてないよね? Yes ここに膨大な量の条件分岐がはさまると思え 画面描画 終了

意識しなくてはいけないこと 繰り返しが基本構造になっている 繰り返しの中に書くのは 「その一瞬で何をするのか」でしかない このwhileループのことをメインループと呼ぶ 繰り返しの中に書くのは 「その一瞬で何をするのか」でしかない その積み重ねが動きの結果となって現れる 一瞬の長さは具体的に言うと16ms 状況に応じて「その一瞬」で何をするか 適切に分岐する必要がある

{}重要!超重要! while(繰り返し条件){ 繰り返したいこと } の中に if(条件式){ 条件が成立して いたらやること が入る! while(window.update() == true) { if(キーが押されてたら?) { うごけー } else { 押されてなかったら これやっとけー(省略可) } if(違うキーが押されてたら?) { 違う感じにうごけー }

せっかくの力作がバラバラに… アニキ!ついていきやすぜ!

移動するようにしたはいいけどさ bodyだけ動かすとズレる じゃあ他のタイヤも合わせて動かすの? それはさすがにかったるいですよね bodyを動かしたらそれにくっついてる 物は一緒に動いてくれればいいのになぁ

それすなわち親子の契りなり Modelシリーズ共通命令「setParent()」 あるモデルに対して「お前の親はコイツだ」と設定する命令 子モデル.setParent(親モデル, true); これで「親が動くと子はそれについていく」という状態になる 「, true」に関しては今はスルー trueにして使った方が便利な場面が多い

モデルの親子関係 実は非常に深いトピック 3DCGの根幹をなすと言ってもいい が、この授業の趣旨は「細かいことは (とりあえず)気にしない」なのでスルー 後でみっちりやる、かもしれない

前回姿勢で混乱した人は特に気をつけてね 位置と姿勢の制御

グローバル座標とローカル座標 3次元空間はx,y,zの 座標値によって表す それぞれのモデルにとっての前後、左右、上下方向という考え方も存在する ローカル座標

移動や回転の指示は グローバルもローカルも両方使う いきなり面と向かって「北に5m進め」と 言われても困りますよね 自分の向いている向き基準で指示された方が わかりやすい でも電話口やメールでいきなり「今向いて いる方向に対して真横に3m進んで」と 言われたら? 何にぶつかるかわかったもんじゃない! 地図を見てどの方角へ、と指示された方がいい

移動制御命令 glTranslate(x, y, z) loTranslate(x, y, z) glMoveTo(x, y, z) 「東に3歩、北に1歩進め」という感じの指示 loTranslate(x, y, z) 今いる位置からローカル座標基準で (x, y, z)の方向へ移動する 「前に3歩、左に1歩進め」という感じ glMoveTo(x, y, z) グローバル座標(x, y, z)へ直接移動する 位置を固定する以外の場面では使いづらい 「この場所へワープしろ」という指示、人間業じゃない

姿勢制御命令 glFocus(x, y, z) loFocus(x, y, z) グローバル座標で指示した場所へ そのモデルの先頭方向を向ける 常にある方向を向かせたい時に便利 「あのビルの方へ向け」というような感じ loFocus(x, y, z) ローカル座標で指示した場所へ 先頭方向を向ける (0,0,-1)を指定した場合は何も起きない モデル自体を回転させたい時に便利 「今の向きに対して右側を向け」という感じ

glVec()ってなんだったの? モデルの今の位置に対して、グローバル座標のどっち側を向いているかを指定する、という命令でした 北を向け、南南東に向け、という感じです glFocus()に置き換えることもできますが、単に方向を指示したいだけの場合はglVec()の方が便利です glFocus(位置+glVec()で指定する向き)で 同じ意味になりますが、まどろっこしいです (0,0,-1) (1,0,0)

補足:アップベクトル 3次元だと、同じ方向でも捻れが入ったりする モデルのてっぺんが どこを向いているか、を追加で指定して、 捻れ具合も制御可能 glUpvec()を使う glVec()で指定したベクトルに対して垂直な方向を指定する 実際は垂直じゃ無くても適当に補正してくれる (0,1,0) (0,0,-1) (0,0,-1) (-1,1,0)

課題 BASIC: ADVANCED: EXTREME: 基本図形が、カーソルキーで前後左右に 動かせるようにする 基本図形(Coneが分かりやすい)を カーソルキーの左右で回転、 前後で前進と後退ができるようにする EXTREME: 自分の作ったものでADVANCEDの条件を満たす EXTRA:更にカーソルキー以外の操作で、 何かしらの特殊動作(変形とか)を行うようにする