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

Slides:



Advertisements
Similar presentations
初年次セミナー 第13回 2次元グラフィックス(1).
Advertisements

情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
情報処理 第8回.
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
Microsoft PowerPoint98 Netscape Communicator 4.06[ja]
情報処理 第7回.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
3DCGコンテンツの基礎 第5回授業:最終課題制作
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プロジェクト演習Ⅱ インタラクティブゲーム制作
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
Excelによる3-D/等高線グラフの描画 2変数関数の描画 Excel によるグレイスケールマップ風描画
Excelによる3-D/等高線グラフの描画 2変数関数の描画 Excel によるグレイスケールマップ風描画
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
プロジェクト演習Ⅱ インタラクティブゲーム制作
インタラクティブ・ゲーム制作 <プログラミングコース>
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プログラミング演習3 第2回 GUIの復習.
プログラミング 設計資料 メンバー:.
CGと形状モデリング 授業資料 長井 超慧(東京大学)
C 言語について 補足資料 資料および授業の情報は :
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
Microsoft Visual Studio 2005 の使い方
情報処理 第8回.
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング応用 printfと変数.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
オブジェクトの回転と演算 (復習) オブジェクトの回転 空を作るには 形を組み合わせる
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
ゲームプログラミング講習  第3章 ゲーム作成 ブロック崩しを作ります ゲームプログラミング講習 第3章 ゲーム作成.
デジタル画像とC言語.
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
C言語 はじめに 2016年 吉田研究室.
プログラミング基礎a 第6回 C言語によるプログラミング入門 配列と文字列(その2)
第1章 いよいよプログラミング!! ~文章の表示 printf~
アルゴリズムとプログラミング (Algorithms and Programming)
シミュレーション論Ⅰ 第7回 シミュレーションの構築と実施.
オブジェクト指向プログラミング クラス 継承
円と正多角形 プログルをつかって学ぼう.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
プログラミング入門 電卓を作ろう・パートI!!.
Excelによる3-D/等高線グラフの描画 2変数関数の描画 Excel によるグレイスケールマップ風描画
第5回 プログラミングⅡ 第5回
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
標準入出力、変数、演算子、エスケープシーケンス
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
ソフトウェア工学 知能情報学部 新田直也.
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
プロジェクト演習Ⅱ インタラクティブゲーム制作
情報処理Ⅱ 2005年11月25日(金).
プロジェクト演習Ⅱ インタラクティブゲーム制作
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
情報処理Ⅱ 小テスト 2005年2月1日(火).
FK Toolkit for Visual C++2010
printf・scanf・変数・四則演算
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
Kinectで画像処理 第2回.
Presentation transcript:

プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2 第2回 はじめての3Dプログラミング 3次元お絵かき編

今日の内容 「オブジェクト」によるプログラミング 「世界」を我が手に プログラムによる3次元的お絵かき

http://www.teu.ac.jp/aqua/~rita/gp-prog/ ブックマークはちゃんとしたかな? 授業資料などを 公開していくサイト http://www.teu.ac.jp/aqua/~rita/gp-prog/ ブックマークはちゃんとしたかな?

今週のプロジェクト 前回に書いたプログラム+αの内容を 含んでいます 前回うまく書き取れなかった人は、 何がよろしくなかったのかを見比べてみよう 落としたZipファイルを解凍して、 出てきたフォルダを好きなところに配置

とりあえず開いてみよう ソリューション エクスプローラー → First3D → ソース ファイル →main.cpp 人によっては設定項目が隠れてて見えない人がいる ツール→設定→上級者用の設定、にチェック ウィンドウ→ウィンドウレイアウトのリセット

先週の復習も兼ねつつ プログラムの構造を掴もう

これが最小単位のプログラム C++プログラムの 最小単位は「関数」 exeファイルを実行 (デバッグ開始)するとmain()関数から処理が始まる main()内の処理が 上から順に実行され、全部終わると プログラムは終了 int main(int argc, char *argv[]) { return 0; }

3DCGのための最小プログラム 「FKUTという道具を使うよ」という宣言 fkut_SimpleWindowというオブジェクトをwindowという名前で作る そのwindowに対して色々セッティングする ウィンドウが閉じられるまで、ぐるぐる回る // FKUT使うよ! #include "FKUT/FKUT.h“ int main(int argc, char *argv[]) { // ウィンドウ作るよ! fkut_SimpleWindow window; window.setSize(800, 600); window.setBGColor(0.3, 0.6, 0.8); window.open(); while(window.update() == true) { // ここに来週以降色々書く } return 0; }

使うよ宣言(インクルード) 関数を書くよりも前に宣言する必要がある #incude “使いたいものを並べてあるお品書きファイル” という書き方をする フォルダを辿ればお品書きファイルの中身はすぐ確認できます 複数使いたいものがある場合は複数includeすればいい // FKUT使うよ! #include "FKUT/FKUT.h“ int main(int argc, char *argv[]) { // ウィンドウ作るよ! fkut_SimpleWindow window; window.setSize(800, 600); window.setBGColor(0.3, 0.6, 0.8); window.open(); while(window.update() == true) { // ここに来週以降色々書く } return 0; }

作るよ定義(オブジェクト生成) プログラムで利用したいものは種類ごとに「名前を付けて作る」のが原則! 種類ごとに○○オブジェクト、と呼ぶ FKUTだとウィンドウはfkut_SimpleWindowという種類のオブジェクトで作れる それをwindowという名前で作ったのが→ 関数の中で作ること // FKUT使うよ! #include "FKUT/FKUT.h“ int main(int argc, char *argv[]) { // ウィンドウ作るよ! fkut_SimpleWindow window; window.setSize(800, 600); window.setBGColor(0.3, 0.6, 0.8); window.open(); while(window.update() == true) { // ここに来週以降色々書く } return 0; }

作ったものに指示を出すよ (メンバ関数呼び出し) windowという名前で作ったものに指示を出して望み通りの 動きにしていく 「名前.命令(詳細);」とするのが基本形 オブジェクトの種類ごとに使える命令は異なる 追々公開していきます // FKUT使うよ! #include "FKUT/FKUT.h“ int main(int argc, char *argv[]) { // ウィンドウ作るよ! fkut_SimpleWindow window; window.setSize(800, 600); window.setBGColor(0.3, 0.6, 0.8); window.open(); while(window.update() == true) { // ここに来週以降色々書く } return 0; }

こういうのを 「オブジェクト指向プログラミング」って言うらしいよ 使うよ宣言インクルード! 名付けて作るよオブジェクト! オブジェクトの種類のことを「クラス」と 呼ぶことは知っておくと良いかも 今だ呼ぶんだメンバ関数! オブジェクトの種類ごとに持ち合わせている命令のことを「メンバ関数」と呼ぶ

今週のサンプルを分析しよう 赤字部分が 付け足し部分 「作りたい図形の種類 図形につける名前」で 作る物を定義 「作りたい図形の種類 図形につける名前」で 作る物を定義 定義した名前に対して 命令を呼び出して、 詳細を決めていく 決まったらwindowに 対して登録(entry) #include "FKUT/FKUT.h“ int main(int argc, char *argv[]) { fkut_SimpleWindow window; window.setSize(800, 600); window.setBGColor(0.3, 0.6, 0.8); window.open(); fkut_BlockModel block; // ブロックを作る! block.create(10.0, 10.0, 10.0); // 縦横高さが10のブロック block.setMaterial(Yellow); // 色は黄色 window.entry(block); // windowへ表示 fkut_SphereModel sphere; // 球を作る! sphere.create(8, 10.0); // 滑らかさ8、半径10の球 sphere.setMaterial(Red); // 色は赤 sphere.glMoveTo(20.0, 10.0, 0.0); // X20,Y10へ移動 window.entry(sphere); // windowへ表示 while(window.update() == true) { // ここに来週以降色々書く } return 0; }

ビルドして動かすと? ビルドの方法は、 次の何れか F7キーを押す メニューから 「ソリューションの ビルド」を選択 →こうなるはず

数値で構築される世界の法則を知ろう 「世界」を我が手に

世界は数値で構築されている 確かめてみよう 下のコードを適当なところに追加 赤の軸がX軸 緑の軸がY軸 1マスで距離5 window.showGuide (FKUT_ALL_GUIDE); 赤の軸がX軸 緑の軸がY軸 1マスで距離5

数学のグラフを思い出してみよう (嫌かも知れないけど) 右に行くほどX座標が大きくなる 左に行くほどX座標が小さくなる 上に行くほどY座標が大きくなる 下に行くほどY座標が小さくなる 軸の伸びている方がプラス、と覚えよう でもこれって2次元だよね?

実は三次元なんですよ 以下のコードを追記 さっきの追記は以下のように修正 さあ、どうなる? window.setCameraPos(0.0, 50.0, 100.0); window.setCameraFocus(0.0, 0.0, 0.0); さっきの追記は以下のように修正 window.showGuide(); さあ、どうなる?

座標とカメラ 青い軸がZ軸 最初は(0, 0, 100)の地点から(0, 0, 0)を見てました 今は(0, 50, 100)に上昇して(0, 0, 0)を見下ろしている状態 // カメラを右ドラッグで自由に動かせるモード window.setTrackBallMode(true);

理屈が分かったところで プログラムによる 3次元的お絵かき

とりあえず作れる図形は4種類 fkut_BlockModel で直方体 fkut_SphereModel で球 fkut_PrismModel で円柱 fkut_ConeModel で円錐 作りたい図形に応じて定義時のタイプを選ぶ 図形ごとに付ける名前は自分で好きに決めていい 命令は「図形名.命令();」の書式で呼び出す

作る手順 create()でサイズを決める 角数とは曲線の滑らかさをあらわす Blockの場合は(幅,高さ,奥行き) Sphereの場合は(角数,半径) Prismの場合は (角数,上面半径,底面半径,高さ) Coneの場合は(角数,半径,高さ) 角数とは曲線の滑らかさをあらわす 曲線は角をたくさん作って擬似的に表現する

3Dでは単純な色と言わず マテリアルと呼びます 単純に色が付かないのは3次元だから 光の向きによって陰影が付く 今は上から斜めに光が当たっている設定 setMaterial()でマテリアルを指定する だいたいは英単語で指定できる 指定できるキーワードは次のスライドを参照

使えるマテリアル一覧 AshGray BambooGreen Blue Brown BurntTitan Coral Cream Cyan DarkBlue DarkGreen DarkPurple DarkRed DarkYellow DimYellow Flesh GlossBlack GrassGreen Gray1 Gray2 Green HolidaySkyBlue IridescentGreen Ivory LavaRed LightBlue LightCyan LightGreen LightViolet Lilac MatBlack Orange PaleBlue PearWhite Pink Purple Red UltraMarine Violet White Yellow

位置と姿勢 位置はglMoveTo(x, y, z);で移動できます 姿勢がちょっと難しいです 全てのModelは作りたての時(0,0,-1)を 向いてます、これを「前」にします それを基準に向けたい方向を考えます 右(1,0,0)、左(-1,0,0) 上(0,1,0)、下(0,-1,0) 前(0,0,-1)、後(0,0,1) glVec(x, y, z);で向けたい方向を指定します

作るだけじゃ表示されない ウィンドウに「登録」することで 表示されます fkut_SimpleWindowにentry()という命令があるので、 ウィンドウの名前.entry(登録したい図形の名前); とすればよい ウィンドウのオブジェクトと、 モデルのオブジェクトを結びつける命令

作例 fkut_BlockModel kushi; // 直方体を1つ用意、名前は”kushi” kushi.create(1.0, 1.0, 70.0); // 縦横高さがの立方体を作る kushi.setMaterial(Green); // 色は黄色にする kushi.glMoveTo(-2.5, -2.5, 0.0); // 直方体の中心点を指定する kushi.glVec(5.0, 15.0, 0.0); // 右斜め上を向かせる window.entry(kushi); // ↑で先に作ったウィンドウ(window)に表示する fkut_SphereModel dangoA, dangoB, dangoC; // 球を1つ用意、名前は”dangoA,B,C” dangoA.create(8, 8.0); dangoA.setMaterial(Yellow); dangoA.glMoveTo(-5.0, -10.0, 0.0); window.entry(dangoA); // ↑で先に作ったウィンドウ(window)に表示する dangoB.create(8, 8.0); dangoB.setMaterial(Yellow); dangoB.glMoveTo(0.0, 5.0, 0.0); window.entry(dangoB); // ↑で先に作ったウィンドウ(window)に表示する dangoC.create(8, 8.0); dangoC.setMaterial(Yellow); dangoC.glMoveTo(5.0, 20.0, 0.0); window.entry(dangoC); // ↑で先に作ったウィンドウ(window)に表示する

こうなる

今週の課題 以下のお題の図形を作ってみよう 一番のお気に入りを Assitで提出 何かの動物 自動車 サザエさん的なおうち →は、ねこ、のつもり 自動車 サザエさん的なおうち その他思いつくもの 一番のお気に入りを Assitで提出