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

Slides:



Advertisements
Similar presentations
第5章 JMPのインストールと基本操作 廣野元久
Advertisements

プロジェクト演習Ⅱ インタラクティブゲーム制作
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
情報処理 第8回.
Microsoft PowerPoint98 Netscape Communicator 4.06[ja]
情報処理 第7回.
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
3DCGコンテンツの基礎 第5回授業:最終課題制作
プレゼンテーション用ソフトウェア Impress
ゲームプログラミング講習 第1章 DXライブラリ入門
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
プレゼンテーション用ソフトウェア Impress
第6章 2重ループ&配列 2重ループと配列をやります.
9 Microsoft Word(1).
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
初年次セミナー 第2回 文字の出力.
マイクロソフト Access を使ってみよう 第1回
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
Microsoft PowerPoint Netscape Communicator
10 Microsoft Word(1) 10.1 Microsoft Word v.Xの概要 起動 終了
CGと形状モデリング 授業資料 長井 超慧(東京大学)
第2回 Microsoft Visual Studio C++ を使ってみよう
C 言語について 補足資料 資料および授業の情報は :
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
Microsoft Visual Studio 2005 の使い方
情報処理 第8回.
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング応用 printfと変数.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング 4 記憶の割り付け.
第6回:ラケットを動かそう! (キーボードによる物体の操作)
ゲームプログラミング講習  第3章 ゲーム作成 ブロック崩しを作ります ゲームプログラミング講習 第3章 ゲーム作成.
0.2 プロジェクトの準備 DXライブラリを使うための準備.
デジタル画像とC言語.
コンピュータ プレゼンテーション.
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
プロジェクト演習Ⅱ インタラクティブゲーム制作
C言語 はじめに 2016年 吉田研究室.
高度プログラミング演習 (01).
第1章 いよいよプログラミング!! ~文章の表示 printf~
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
プログラミング入門 電卓を作ろう・パートI!!.
本当は消去できていない!? ~データを完全消去する方法~
本当は消去できていない!? ~データを完全消去する方法~
vc-1. Visual Studio C++ の基本操作 (Visual Studio C++ の実用知識を学ぶシリーズ)
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
標準入出力、変数、演算子、エスケープシーケンス
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
プロジェクト演習Ⅱ インタラクティブゲーム制作
情報処理Ⅱ 2005年11月25日(金).
プロジェクト演習Ⅱ インタラクティブゲーム制作
FPS(続き).
FK Toolkit for Visual C++2010
printf・scanf・変数・四則演算
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
プログラミング 3 ポインタ(1).
第1章 printf(“文字の出力\n”);
Kinectで画像処理 第2回.
Presentation transcript:

プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2 第1回 はじめての3Dプログラミング Hello 3D World!

今日の内容 セットアップがまだの人は後回し 「何もしない」プログラム か~ら~の~? 「3次元お絵かきできる」プログラム とりあえずプログラムを書いてみます 「何もしない」プログラム か~ら~の~? 「3次元お絵かきできる」プログラム

セットアップするもの Visual C++ 2010 Express Edition FK ToolKit 統合開発環境のフリー版(機能は十分!) Microsoft社製のスタンダードな開発環境 FK ToolKit 3Dでぐりぐりするものを作るための道具箱 渡辺大地先生開発、私が少しお手伝い

今日は18時前に切り上げます Visual Studio 2010を入れてある人 Visual Studio 2010を入れてない人 FK ToolKit(VS2010用)をセットアップして、授業に付いてきてください Visual Studio 2010を入れてない人 確実に間に合わないので、今日はTextPadで プログラムの書き取りだけしてください 来週までにVS2010を入れて、その後にFKを入れてください

http://www.teu.ac.jp/aqua/~rita/gp-prog/ 今後配布物はここを通して配布します 授業資料などを 公開していくサイト http://www.teu.ac.jp/aqua/~rita/gp-prog/ 今後配布物はここを通して配布します

今週のプロジェクト Visual Studioではプログラムを 「プロジェクト」という単位で開発する 毎週こちらで用意したプロジェクトを 授業資料ページからダウンロードします 落としたZipファイルを解凍して、出てきたフォルダを好きなところに配置

中身 First3D.sln main.cpp FKUT これを開くとVisual Studioが起動します ないしょ☆

とりあえず開いてみよう ソリューション エクスプローラー → First3D → ソース ファイル →main.cpp C++のプログラムで主に書くのは cppファイル hファイルもそのうち書きます

ファイルとフォルダ 最近のPCや携帯ではファイルはまだしも「フォルダの位置」などを気にしなくても良くなっています しかし、開発する側はそうも言ってられません 前期のPC操作演習をしっかり復習しよう

「何もしない」ところからはじめよう 何もしないプログラム

はじめてのプログラム 右に示すプログラムを打ち込んでみよう プロジェクトのmain.cppに書き込む Visual Studioがまだ入っていない人は、TextPadで打ち込んで保存しておき、セットアップが済んでからコピペで試してみよう int main(int argc, char *argv[]) { return 0; }

スライドからのコピペは禁止! コピペする人にはドハマリする呪いを かけておきました 「return 0;」の行頭はTABを1つ打つ 今後はサンプルを渡してスキップする 場面も出てきますが、まずは自分の手で打ち込んで「体得」してもらいたい 「return 0;」の行頭はTABを1つ打つ 1段下げるのはプログラムでとても重要! 素直に打ち込んでいれば自然と下がるはず

早速動かそう メニューから 「ビルド→ソリューションのビルド」を選ぶ うまくいったようなら 「デバッグ→デバッグなしで開始」を選ぶ F7キーがショートカットなので、それでも可 下の欄に「 ビルド: 1 正常終了」が出ればOK うまくいったようなら 「デバッグ→デバッグなしで開始」を選ぶ Ctrl+F5がショートカットなので、それでも可 ……何も起きない、だと……?

ちなみに今できあがった プログラムは →ここにあります _exeフォルダ内に .exeファイルができる Visual Studioからでなくても、このexeファイルをダブルクリックすれば実行できます 今は何も起きないけど

C++における プログラムの原則(1) プログラムは上から下へ流れるように 順番に命令が実行されていく プログラムの最小単位は「関数」である 基本的にはね プログラムの最小単位は「関数」である 関数とは命令をひとかたまりにして、 名前を付けて、{}で括ったもののこと C/C++のプログラムはmain関数から 実行される return 0;が「この関数おしまい」を指すので、何もせずに終了してしまうワケ

良くあるプログラム入門で書く奴 さっきのプログラムに少し書き足してみよう 赤字の部分を書き足すこと 何もしないだけだと 流石にアレだしね 折り返しになってる部分は1行で書いてしまおう #include <iostream> int main(int argc, char *argv[]) { std::cout << “Hello World!” << std::endl; return 0; }

実行結果 ヤッタァァァァァァァァァァァァァァシャベッタァァァァァァァァァァァァァァ

これらはC++に標準で備わっている命令たち (=FKが無くても使える共通機能) さっき書き足した言葉の意味 #include <iostream> iostreamというグループでまとめてある命令を使うぜ!宣言 std::cout << “しゃべらせたいこと” << std::endl; “”で括ってある文字列を、白黒のウィンドウに表示させる命令 これらはC++に標準で備わっている命令たち (=FKが無くても使える共通機能)

C++における プログラムの原則(2) プログラムで扱う命令は、 前もって「宣言」しておく必要がある 関数の中で宣言するもの、外で宣言するもの、両方ある 関数の中では、宣言してあるものの 「名前」を読んで命令を組み立てていく 名前はあらかじめ決められているもの、 自分で決めるもの、両方あるので、 ごっちゃにならないようにしよう

白地に黒文字じゃつまんないよ ウィンドウを表示させてみよう

3次元のお絵かきができる ウィンドウ 要らない部分は上書きしつつ書き足そう windowという名前でウィンドウ作るよ サイズは800x600ね 背景色は水色ね さあ開け! FKUTというキーワードがついているものは、FKを入れたことで使える機能 #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(); return 0; }

実行結果 あ……れ? ウィンドウを開いたらその後がreturn 0;なので終了しちゃうんですね 一瞬で駆け抜けてしまったと思います ウィンドウを開いたらその後がreturn 0;なので終了しちゃうんですね 「ウィンドウを閉じるまで待つ」流れにしないとダメっぽい

ウィンドウを出す プログラム[改訂版] while文という構造を使ってみよう ()内に「これが満たされている間は繰り返し続けろ」という条件を書く 今回の場合は「ウィンドウが閉じられてなかったら」という条件 {}内に「繰り返したい処理」を書く 今日のところはコメントだけ書いておこう //で始めた行はメモ書きになる #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; }

こうなるはず 詳細は来週以降扱うが、既に準備が整っていて、もっと不覚いじってみたい人は、次スライド以降の内容を先取りして進めておいてもいい

理屈が分かったところで プログラムによる 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_BlockModel 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; // すごい変数「球になる変数」 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)に表示する

こうなる

来週以降に出す課題 以下のお題の図形を作ってみよう 時間を掛けて力作を作っておこう! 何かの動物(→はねこ) 自動車 サザエさん的なおうち その他思いつくもの 時間を掛けて力作を作っておこう!