Tekutama AR ~ 拡張現実感によるオーバーレイ表示と動作 ~ 情報物理研究室 渡部 修平 1

Size: px
Start display at page:

Download "Tekutama AR ~ 拡張現実感によるオーバーレイ表示と動作 ~ 情報物理研究室 渡部 修平 1"

Transcription

1 Tekutama AR ~ 拡張現実感によるオーバーレイ表示と動作 ~ 情報物理研究室 渡部 修平 1

2 目次 項 1. はじめに 3 2. 開発環境 ARToolkit OpenGL GLUT Metasequoia GLMetaseq DCG モデルの作成 7 4. AR プログラムの構成 main 関数 メインループ関数 アニメーション ジャンプ 宙返り 複数マーカ おわりに 16 参考文献 17 付録 18 2

3 1. はじめに Augmented Reality( 以下 AR) とは, 拡張現実感と呼ばれ, 現実世界にデジタル情報を重ね合わせ, 現実世界を拡張させる技術である. 近年 AR を用いた代表的なサービスとして セカイカメラ やカーナビゲーションの サイバーナビ がある. セカイカメラとは,iPhone や Android などの携帯端末のカメラを通して現実世界を見ると, 他の人が書き込んだその場 その時のタグ情報を, カメラが映し出している現実映像に重ね合わせて表示するサービスである. 例えば, ある店をセカイカメラで通して見ると, その店の位置を解析し, その店のメニューやクーポン情報, 口コミ情報のタグを表示することが出来る. サイバーナビは, フロントガラスに配置した車載カメラの現実映像に, ナビゲーション情報をリアルタイムに重ねて表示することが出来る. また,AR を広報活動に活用する例もある. トヨタ自動車は, マーカを認識するとトヨタ社製の車が描画され, 車が動くアニメーションもされる. 本研究では,AR 技術を用い, 近畿大学工学部のイメージキャラクターである てくたま を AR で表現し, てくたま の認知度を高め, 近畿大学工学部の広報活動を推進するアプリケーション開発を行った. 図 1 Tekutama AR 実行画面 3

4 2. 開発環境 2-1 ARToolkit ARToolkit とは, マーカベースの AR アプリケーション開発を支援する C/C++ 用のプログラミングライブラリである.ARToolkit を使用すると, 紙に印刷されたパターンをカメラで読み取り, その上に 3D オブジェクトをオーバーレイ表示するアプリケーションが容易に作ることが出来る ARToolkit が提供する機能として, カメラ画像の取得, マーカの検出とパターンの認識, マーカの 3 次元位置 姿勢の計測, 実写画像と 3DCG の合成表示, などがある. ARToolkit のアーキテクチャは図のようになっている ARToolkit には主にビデオキャプチャモジュール,AR 計算モジュール, グラフィック処理モジュールがある. ビデオキャプチャモジュールは, 内部の OS に応じたインターフェースを使用している.AR 計算モジュールはマーカ検出のための画像処理やパターン認識を行い, 標準の API を使用している. VRML 描画モジュールは VRML 形式の 3DCG を表示する処理に OpenVRML を用いているが, 本研究では使用せず, 代わりに GLMetaseq ライブラリを使用する.GLMetaseq は 3D モデリングソフト Metasequoia で作成したモデルのデータである mqo ファイルを読み込み, OpenGL で表示するためのライブラリである. 図 2 ARToolkit のアーキテクチャ 4

5 2-2 OpenGL GLUT ARToolkit のグラフィック処理モジュールには OpenGL と GLUT を用いる.OpenGL は, 点 線 多角形の描画, 色やパターンの制御, 幾何変換, シェーディング処理などを行う. GLUT は, 主にウィンドウ管理やイベント処理の設定を行う. ウィンドウ管理やイベント処理の設定は OS とウィンドウシステムに依存しているため, そろぞれの OS に則って設定を行う必要がある. なお,OpenGL と GLUT はマルチプラットホームに対応しており, プラットホームに依存しないシステム構築が可能である. ARToolkit ではカメラの画像の描画や射影幾何の設定を行う処理系に gsub と gsub_lite がある.gsub は GLUT によるウィンドウ管理やイベント処理が含まれているが, gsub_lite には含まれておらず, 自力で実装することになる. 当初 gsub を用いて開発を行っていたが, てくたまを表示すると, 図 3 のようにてくたまのテクスチャを貼った面に対して, 陰影処理が施されない問題が起きた. 原因は,gsub の GLUT の処理をまとめて行っている関数により GLMetaseq ライブラリのテクスチャの処理がされないことが分かり,gsub_lite での開発に至った. 図 3 gsub での実行画面 図 4 グラフィック処理モジュールの階層構造の違い 5

6 2-3 Metasequoia Metasequoia( メタセコイア ) とは 3DCG モデルを作成するための 3D モデリングソフト ウェアである. てくたまの 3DCG モデル作成に用いた. シェアウェア版とフリーウェア版の 2 種類が提供されており 本研究ではフリーウェア版の metasequoia LE R2.4a を使用した. 2-4 GLMetaseq GLMetaseq は 3D モデリングソフトウェア Metasequoia で作成した 3D モデルのデータである mqo ファイルを読み込んで OpenGL で表示するための C/C++ 用のプログラミングライブラリである. これを使用すると 3D モデルを現実世界に表示するプログラムが非常に容易になる. 6

7 3. 3DCG モデルの作成 てくたまを AR で表現するために 3DCG モデルを作成する. 作成には Metasequoia を 用い 以下の手順で行った. 1. 3DCG モデルの基となる画像を入手 ( 図 5) 図 5 基となる画像 2. Metasequoia に画像を取り込み 画像に合わせ各パーツを作成する. 3. 各パーツを組み合わせ 一つのモデルにする.( 図 6) 図 6 無色透明のモデル 7

8 4. モデルは無色透明であるため 各パーツに色を塗り 模様などの複雑な部分はテク スチャマッピングを行う. 5. 最後に光源設定を行う.( 図 7) 図 7 完成した 3DCG モデル 8

9 4. AR プログラムの構成 本研究では 紙に印刷されたマーカーをカメラで読み取り, その上に 3DCG モデルのてくたまをオーバーレイ表示し さらにアニメーションするアプリケーション開発を行った. マーカーは 2 枚用意し 1 枚はオリジナルマーカーである近畿大学校章マーカーを用意した. ( 図 8) 図 8 近畿大学校章マーカーと HIRO マーカー プログラムは gsub と gsub_lite のどちらかを用いてプログラムを構築していくが 3DCG モデルにテクスチャマッピングを行っている場合は gsub_lite を推奨する. 理由は 2-2 OpenGL GLUT で述べた通りであるが gsub_lite を用いることで OpenGL や GLUT についてより理解することができる. 図 9 プログラムの全体像 AR プログラムの全体像を図 9 に示す.main 関数では主に初期化が行われ その後メインループ関数に入り キーイベント処理による終了処理が行われるまでメインループ関数の処理を繰り返す. 次に main 関数とメインループ関数の説明を行う. 9

10 4-1 main 関数 1 GLUT の初期化 このプログラムは GLUT を使用しているので最初に GLUT の初期化を行う必要がある. glutinit() 関数を実行することで以降に行われる GLUT の処理を行えるようにする. 2ビデオ カメラの設定ビデオやカメラを使えるように設定を行う. arvideoopen() 関数によってビデオデバイスを使える状態に設定する. 設定ファイルには xml ファイルを読み込んでいる.arParamLoad() 関数はカメラパラメータのファイルを読み込む. その後, 使用するカメラの解像度に合わせてカメラパラメータを変更する必要があり この処理には arparamchangesize() 関数と arinitcparam() 関数を使用する. 3 パターンのロード マーカのパターンをロードする. ロードには arloadpatt() 関数を使用し 読み込んだパター ンには個別の ID 番号が設定され マーカの一致度を調べるときに使用する. 4ウィンドウの設定ウィンドウの設定は GLUT を用いる.glutInitDisplayMode() は GLUT のウィンドウの表示モードや各種バッファ処理の有無を指定する. GLUT_DOUBLE : ダブルバッファ GLUT_RGBA : RGBAカラーモード GLUT_DEPTH : デプスバッファを使用 10

11 53DCG モデルのロード てくたまの 3DCG モデルの mqo ファイルをロードする. ロードには GLMetaseq ライブラ リの関数である mqocreatemodel() 関数を使う. 6 キャプチャの開始 初期化 設定を終え arvideocapstart() 関数を使用しビデオキャプチャを開始する. 7メイループに入る glutmainloop() 関数を実行しメインループに入る. この関数を呼び出すとプログラムはイ ベント待ち状態になる. またイベントに対して行う処理関数のことをコールバック関数と呼 び glutmainloop() 関数を実行する前にはコールバック関数の登録を行う必要がある. 以下 主なコールバック関数を示す. glutdisplayfunc() 描画処理が必要な時に行う関数 glutkeyboadfunc() キーボードの入力があった時に行う関数 glutidlefunc() 他に処理すべきイベントが何も無い時に行う関数 本研究ではglutIdleFunc() 関数で繰り返される処理をメインループとする. 4-2 メインループ関数 1 カメラ画像の取得 描画 arvideogetimage() 関数を使用しビデオデバイスから画像を取得する. その後 argdispimage() 関数で取得した画像をウィンドウに描画する. 11

12 2マーカの検出 認識 ardetectmarker() 関数を使用すると取得したカメラ画像からマーカの検出 認識を行う. まず取得したカメラ画像を2 値化処理によって白黒画像にする. 次にラベリング処理によって 白黒画像の塊になった領域ごとにラベル ( 番号 ) を割り当てる. ラベル付けされた領域の端の一点を起点に輪郭の抽出を行い 最終的に4 個の頂点を持つ領域を四角形とする. その後テンプレートマッチングを行い 四角形の中のパターンを認識している. この処理で行われた情報はARMarkerInfo 型の構造体に格納される. ARMarkerInfo 構造体 typedef struct { int area ; // マーカーのピクセル数 int id ; // マーカー ID int dir ; // マーカーの回転方向 ( 3 : 2 : 1 : 0 : ) double cf ; // 信頼度 ( 0.0 ~ 1.0 ) double pos[ 2 ]; // マーカーの中心座標 ( x, y ) double line[ 4 ][ 3 ]; // 直線の式 ( ax + by + c = 0 ) 4 辺 ( 枠線 ) double vertex[ 4 ][ 2 ]; // マーカーの頂点座標 ( x, y ) 4 点 ARMarkerInfo; 3マーカの一致度の比較 ardetectmarker() 関数は全ての マーカらしき部分 を検出されるため 検出されたマーカから最も高い一致度のものを探す必要がある. そこでarDetectMarker() 関数の処理で ARMarkerInfo 構造体に格納された情報の中のcf( 信頼度 ) を比較して 最も高い数値のマーカをパターンとして認識している. 4 マーカの位置 姿勢の計測 argettransmat() 関数を用い 検出されたマーカの情報からマーカ カメラ間の変換行列を 求める. 5 座標変換行列の適用 求めた変換行列を適用することで 以降に行われる描画処理がマーカの中心とした座標系 で行われる. 12

13 63Dオブジェクト描画描画処理では 隠面処理 光源設定を行い てくたまの 3DCG モデルの描画を行う. GLMetaseq ライブラリの mqocallmodel() 関数を使用するとモデルがマーカの中心に描画される. 最後に次フレームのカメラ画像の取得を指示し メインループの処理を繰り返す. なお Metasequoia の座標系は Y 軸が上を向いているのに対して.ARToolkit は Z 軸が上を向いている. このまま表示すると モデルが倒れている状態で描画される. これを修正するために 3DCG モデルを X 軸まわりに 90 度回転させてから描画を行う. 図 8 てくたまの 3DCG モデルの描画 13

14 5. アニメーション 5-1 ジャンプ 宙返り ジャンプのアニメーションは平行移動を連続的に行う方法で実装した. 平行移動には OpenGL のコマンド gltranslatef() を利用する. 引数に移動させる位置を入力すると 原点 ( マーカの中心 ) から平行移動して描画を行う. ジャンプは物理の鉛直投射を逐次計算するアルゴリズム ( 改良オイラー法 ) を用いて構築した. Δt は時間の差分を表し,Δt 秒後の Z 座標を求める式である. 実行時, カメラのフレームレートを 30 fps に選定すると,3D オブジェクトの描画も 30 fps となり, シミュレーションを現実に合わせるには Δt の値は s(= 1/30 s) となる.a の加速度は重力加速度 g となる. 但し ARToolkit では,OpenGL 上の長さを mm 単位で扱う. したがって g = mm/s2 である.Vz(0) の値を 1500mm/s とし, ジャンプから着地までのタイムを求めると s となる. この設定で描画すると運動のスピードが速く,3D オブジェクトの姿勢と位置の変化が分かりづらい. そこでキーイベント処理で 3, 5 をそれぞれ入力すると,Δt の値を1/3 倍,1/5 倍にすることで, スロー シミュレーションできるようにした. 宙返りはジャンプの始動から着地までに360 度回転するように,Δt 間の回転角度を求める. 物体を回転させるにはOpenGL のコマンドglRotatef() を利用する. これは指定した軸まわりを指定した数値分, 回転を行う. ジャンプと宙返りを併せれば, 前方宙返り, 後方宙返りなどの動きが可能である. 14

15 5-2 複数マーカ 2 個のマーカ ( 以下マーカ 1, マーカ 2) を利用し, マーカ間をモデルが移動する機能を実装した. マーカ間の位置関係を求めるには, ARToolkit のコマンド arutilmatinv() と arutilmatmul() を使用する.arUtilMatInv() はマーカ 1 の座標系からカメラの位置を取得することが出来る.arUtilMatMul() はマーカ 1 の座標系からマーカ 2 の位置 距離を求めることが出来る. 求めたマーカ間の距離を 1/100 ずつマーカ 1 からマーカ 2 に向け平行移動をするようにした. マーカ 2 への到達判定には, マーカ間の距離と現在位置を比較し, 現在位置がマーカ間の距離より大きい場合, マーカ 2 の位置に到達したとし, マーカ 1 へ移動するようにした. 15

16 6. おわりに 2011 年 11 月に東広島市で行われた生涯学習フェスティバルにこのアプリケーションを出展した際 子供らに大変興味を持ってもらうことが出来た. 本研究の目的である広報活動に活用できるアプリケーションが開発できたと考える. また歩行時のてくたまの手足の動きなど 細かいモーションを加えれば表現力が増すと考える. 今後の課題は スマートフォンへの対応や Twitter のつぶやき機能への展開が考えられる. 16

17 参考文献 [1] 橋本 直 : ARToolkit 拡張現実感プログラミング入門 アスキー メディアワーク ス (2008) [2] 谷尻 豊寿 : ARToolkit プログラミングテクニック カットシステム (2008) [3] 床井 浩平 : GLUT による OpenGL 入門 工学社 (2005) [4] 工学ナビ : [5] GLUT API リファレンス : 17

18 付録 プログラムソース 18

19 // ======================================================================= // インクルード #ifdef _WIN32 #include <windows.h> #endif #include <stdio.h> #include <stdlib.h> #define _USE_MATH_DEFINES #include <math.h> #ifndef APPLE #include <GL/gl.h> #include <GL/glut.h> #else #include <OpenGL/gl.h> #include <GLUT/glut.h> #endif #include <AR/config.h> #include <AR/video.h> #include <AR/param.h> #include <AR/ar.h> #include <AR/gsub_lite.h> #include "GLMetaseq.h" // ライブラリ #ifdef _DEBUG #pragma comment(lib,"libard.lib") #pragma comment(lib,"libargsubd.lib") 19

20 #else #endif #pragma comment(lib,"libarvideod.lib") #pragma comment(lib,"libargsub_lited.lib") #pragma comment(linker,"/nodefaultlib:libcmtd.lib") #pragma comment(lib,"libar.lib") #pragma comment(lib,"libargsub.lib") #pragma comment(lib,"libarvideo.lib") #pragma comment(lib,"libargsub_lite.lib") #pragma comment(linker,"/nodefaultlib:libcmt.lib") // 型定義 // キャラクタデータ構造体 typedef struct { MQO_MODELmodel; int pattid; int patt_found; double trans[3][4]; double patt_width; CHARACTER_DATA; // マーカーのデータ ( 二つ ) static CHARACTER_DATA gcharacter[2]; // グローバル変数 /* セットアップに必要な変数 */ // TRUE: ウィンドウモード /FALSE: フルスクリーンモード static const int gwindowed = TRUE; // フルスクリーンモードの設定 20

21 static const int gfullwidth = 800; // 画面解像度 static const int gfullheight = 600; // 画面解像度 static const int gfulldepth = 32; // ビット数 static const int gfullrefresh = 0; // リフレッシュレート.0 でデフォルト値. // 現実世界 / 仮想世界のスケールファクタ static const double gviewscalefactor = 1.0; // 視界の範囲 (Min~Max までの範囲にあるオブジェクトを描画 ) static const double gviewdistancemin = 0.1; static const double gviewdistancemax = ; static char *gcparamname = "Data/camera_para.dat"; // カメラパラメータファイル static char *gvconf = "Data/WDM_camera_flipV.xml"; // ビデオデバイスの設定ファイル static ARUint8 *gartimage = NULL; // カメラ画像へのポインタ static int gartthreshhold = 100; // 2 値化の閾値 static ARParam gartcparam; // カメラパラメータ static ARGL_CONTEXT_SETTINGS_REF garglsettings = NULL;// 描画系の設定情報 /* パターンファイルに関する変数 */ #define NUM_MODEL2 // 使用するマーカーの枚数 static char *gpattname[2] = {"Data/patt.kinki1", "Data/patt.hiro"; // パターンファイル static char *gmodelname = "Data/tekutama2.mqo"; // モデルファイル static double gpatt_centre[2] = {0.0, 0.0; // パターンの中心位置 (mm 単位 ) int count = 0; // fps 計算のための変数 /* オブジェクト移動量 */ GLfloat extx = 0.0; // x 軸の移動量 GLfloat exty = 0.0; // y 軸の移動量 GLfloat extz = 40.0; // z 軸の移動量 int dirflag = 0; // 移動方向フラグ GLfloat exrx = 90.0; // x 軸まわりの回転角度 GLfloat exry = 0.0; // y 軸まわりの回転角度 GLfloat exrz = 0.0; // z 軸まわりの回転角度 21

22 /* move_model 関数で使用する変数 */ int move_count = 0; // 0: モデルビュー 1: ジャンプ 2: コマ送り int View = 0; // モデルビュー int Jumping = 1; // ジャンプ int Frame_advance = 2; // コマ送り int c=0; // ジャンプカウンタ double dt = 0.011; // 時間刻み ( 通常 : 倍スロー : 倍スロー :0.0066) double g = ; // 重力加速度 g ( 単位 mm) double vz = ; // z 方向の速度 double vz0 = ; // z 方向の初速度 ( 初期化用 ) double vz1; double exrz_angle = 0.0; // 宙返りの角度 ( 時間刻み分 ) double time = 0.0; double vy = 5.0; double vy0 = 5.0; double vx = 5.0; double vx0 = 5.0; void Somersault_calc(void); void Move_calc(double xmax, double ymax); // カメラのセットアップ関数 static int SetupCamera( const char *cparam_name, char *vconf, ARParam *cparam ) { ARParam wparam; // カメラパラメータ ( 作業用変数 ) int xsize, ysize; // 画像サイズ 22

23 // ビデオデバイスを開く if ( arvideoopen( vconf ) < 0 ) { printf( " カメラが見つかりません \n" ); return FALSE; // 画像のサイズを取得 if ( arvideoinqsize( &xsize, &ysize ) < 0 ) { printf( " 画像サイズの取得に失敗しました \n" ); return FALSE; // カメラパラメータのロード, 値の修正と初期化 if ( arparamload( cparam_name, 1, &wparam ) < 0 ) { printf( " カメラパラメータファイルのロードに失敗しました \n" ); return FALSE; arparamchangesize( &wparam, xsize, ysize, cparam ); arinitcparam( cparam ); // ビデオキャプチャのスタート if ( arvideocapstart()!= 0 ) { printf( " ビデオキャプチャのスタートに失敗しました \n" ); return FALSE; return TRUE; // マーカのセットアップ関数 static int SetupMarker( const char *patt_name, int *patt_id ) { 23

24 // マーカのロード if ( ( *patt_id = arloadpatt( patt_name ) ) < 0 ) { printf( " パターンファイルのロードに失敗しました \n" ); return FALSE; return TRUE; // 描画系のセットアップ関数 ( ウィンドウ ) static int SetupGraphicsWin( const char *title, int dispwidth, int dispheight ) { // ディスプレイモードの設定 glutinitdisplaymode( GLUT_DOUBLE GLUT_RGBA GLUT_DEPTH ); // ウィンドウの設定 glutinitwindowsize( dispwidth, dispheight ); glutcreatewindow( title ); // gsub_lite ライブラリの初期化 if ( ( garglsettings = arglsetupforcurrentcontext() ) == NULL ) { return FALSE; return TRUE; // 描画系のセットアップ関数 ( フルスクリーン ) static int SetupGraphicsFull( int dispwidth, int dispheight, int dispdepth, int disprefresh ) { char glutgamemode[32]; 24

25 // ディスプレイモードの設定 glutinitdisplaymode( GLUT_DOUBLE GLUT_RGBA GLUT_DEPTH ); // フルスクリーンの設定 if ( disprefresh ) { sprintf( glutgamemode, "%ix%i:%i@%i", dispwidth, dispheight, dispdepth, disprefresh ); else { sprintf( glutgamemode, "%ix%i:%i", dispwidth, dispheight, dispdepth ); glutgamemodestring( glutgamemode ); glutentergamemode(); // gsub_lite ライブラリの初期化 if ( ( garglsettings = arglsetupforcurrentcontext() ) == NULL ) { return FALSE; return TRUE; // 終了関数 static void Quit( void ) { arvideocapstop(); // ビデオキャプチャの停止 arvideoclose(); // ビデオデバイスを閉じる arglcleanup( garglsettings ); // 描画系の終了処理 mqodeletemodel( gcharacter[0].model ); // モデルの削除 mqocleanup(); // GLMetaseq の終了処理 25

26 // キーイベント関数 static void Keyboard( unsigned char key, int x, int y ) { switch ( key ) { case 0x1B: // 終了コマンド case 'Q': case 'q': printf("*** %f (frame/sec)\n", (double)count/arutiltimer()); exit(0); break; case 0x20: // コマ送り ( ジャンプ / スペースキー ) move_count = Frame_advance; vz1 = vz + (-g) * dt; extz = extz + (vz + vz1)/2 * dt; vz = vz1; if( (c % 2) == 0 ){ exrz = exrz + exrz_angle; // 前方宙返り else if( (c % 3) == 0 ){ exrz = exrz + exrz_angle * 2; // 前方 2 回転 else exrz = exrz - exrz_angle; // 後方宙返り // 数値の初期化 if( extz < 40.0 ){ extz = 40.0; vz = vz0; exrz = 0.0; c++; break; // ジャンプカウンタ 26

27 // ジャンプ case 'j': move_count = Jumping; break; // View モード case 'v': move_count = View; extz = 40.0; exrz = 0.0; break; // ジャンプ 1 倍スロー ( 標準スピード ) case '1': move_count = Jumping; dt = 0.033; // 時間刻み Somersault_calc(); // 宙返り (exrz_angle) 計算 break; // ジャンプ 3 倍スロー case '3': move_count = Jumping; dt = 0.011; Somersault_calc(); break; // 時間刻み // 宙返り (exrz_angle) 計算 // ジャンプ 5 倍スロー case '5': move_count = Jumping; dt = ; Somersault_calc(); break; // 時間刻み // 宙返り (exrz_angle) 計算 27

28 default: break; // アイドル関数 ( メインループ ) static void Idle( void ) { static int ms_prev; // 前回の時刻 int ms; // 現在の時刻 float s_elapsed; // 経過時間 ARUint8 *image; // カメラ画像 ARMarkerInfo *marker_info; // マーカ情報 int marker_num; // 検出されたマーカの数 int i, j, k; // ループカウンタ double wmat1[3][4], wmat2[3][4]; // 変換行列 // 前回の呼び出しからの経過時間を計測し, 更新周期が 100Hz 以下になるようにする ms = glutget( GLUT_ELAPSED_TIME ); // 経過時間 ( ミリ秒 ) を取得 s_elapsed = (float)( ms - ms_prev ) * 0.001; // 経過時間 ( 秒単位にする ) if ( s_elapsed < 0.01f ) return; // 100Hz 以下は更新しない ms_prev = ms; // 経過時間を一時保存 // カメラ画像の取得 if ( ( image = arvideogetimage() )!= NULL ) { // 画像へのポインタを取得 gartimage = image; 28

29 // マーカの検出状態を初期化 for (i=0; i<num_model; i++) gcharacter[i].patt_found = FALSE; < 0 ) { // マーカの検出 if ( ardetectmarker( gartimage, gartthreshhold, &marker_info, &marker_num ) exit(0); for (i=0; i<num_model; i++) { // 最も信頼度の高いマーカを探す k = -1; for ( j = 0; j < marker_num; j++ ) { if ( marker_info[j].id == gcharacter[i].pattid ) { if ( k == -1 ) k = j; else if( marker_info[j].cf > marker_info[k].cf ) k = j; // 最も一致度の高いマーカ ( k ) に対して座標変換行列を求める if ( k!= -1 ) { argettransmat( &( marker_info[k] ), gpatt_centre, gcharacter[i].patt_width, gcharacter[i].trans ); gcharacter[i].patt_found = TRUE; /* 2 つのマーカー間の距離を取得 ( マーカ 1[ 校章 ] とマーカ 2[HIRO] ) */ if( gcharacter[0].patt_found > 0 && gcharacter[1].patt_found > 0 ){ // マーカ 1 の座標系でカメラの位置を取得 arutilmatinv( gcharacter[0].trans, wmat1); // マーカ 1 から見たマーカ 2 の位置を取得 arutilmatmul( wmat1, gcharacter[1].trans, wmat2 ); 29

30 Move_calc( wmat2[0][3], wmat2[1][3]); else if( gcharacter[1].patt_found == FALSE extx > 1.0 ){ extx = 0.0; exty = 0.0; if( count == 0 ) arutiltimerreset(); count++; // タイマーのリセット // 処理フレーム数のカウント // 画面の描画指示 glutpostredisplay(); // 移動量計算関数 void Move_calc( double xmax, double ymax) { GLfloat x = 0.0; // x 軸方向移動量 Glfloat y = 0.0; // y 軸方向移動量 int posflag; // マーカーの位置関係 /* オブジェクトの移動量 */ x = xmax * 0.02 ; // マーカー間の距離を分割 y = ymax * 0.02 ; 30

31 /* オブジェクトの移動方向 */ if ( dirflag == 1 ){ x = -x ; y = -y ; /* 描画位置を更新 */ extx = extx + x ; exty = exty + y ; /* マーカーの位置関係 */ if ( xmax > 0 ) posflag = 0 ; // マーカー 1 が左, マーカー 2 が右 else if ( xmax < 0 ) posflag = 1 ; // マーカー 1 が右, マーカー 2 が左 /* マーカーに到達したときに方向を反転 */ if ( posflag == 0 ){ if ( extx >= xmax ){ dirflag = 1; extx = xmax; exty = ymax; else if ( extx < 0 ){ dirflag = 0; extx = 0.0; exty = 0.0; else { if ( extx <= xmax ){ dirflag = 1; extx = xmax; exty = ymax; 31

32 else if ( extx > 0 ){ dirflag = 0; extx = 0.0; exty = 0.0; // ウィンドウの可視性チェック関数 static void Visibility( int visible ) { // ウィンドウが見えていないときはアイドル関数を無効にする if ( visible == GLUT_VISIBLE ) { glutidlefunc( Idle ); else { glutidlefunc( NULL ); // ウィンドウサイズが変更されたときに呼ばれる関数 static void Reshape( int w, int h ) { glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); glviewport( 0, 0, (GLsizei) w, (GLsizei) h ); printf("%d,%d\n",w,h); glmatrixmode( GL_PROJECTION ); glloadidentity(); 32

33 glmatrixmode( GL_MODELVIEW ); glloadidentity(); // 光源を設定する関数 static void SetLight( GLenum light ) { GLfloat light_diffuse[] = { 0.9, 0.9, 0.9, 1.0 ; // 拡散反射光 GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 ; // 鏡面反射光 GLfloat light_ambient[] = { 0.3, 0.3, 0.3, 0.1 ; // 環境光 GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 ; // 位置と種類 // 光源の設定 gllightfv( light, GL_DIFFUSE, light_diffuse ); gllightfv( light, GL_SPECULAR, light_specular ); gllightfv( light, GL_AMBIENT, light_ambient ); gllightfv( light, GL_POSITION, light_position ); // 拡散反射光の設定 // 鏡面反射光の設定 // 環境光の設定 // 位置と種類の設定 glshademodel(gl_smooth); glenable( light ); // 光源の有効化 // 材質特性の設定を行う関数 void SetMaterial(void) { GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 ; // 拡散反射光 GLfloat mat_specular[] = { 0.0, 0.0, 1.0, 1.0 ; // 鏡面反射光 33

34 GLfloat mat_ambient[] = { 0.0, 0.0, 1.0, 1.0 ; // 環境光 GLfloat shininess[] = { 50.0 ; // 鏡面光の指数 // 材質の設定 glmaterialfv( GL_FRONT, GL_DIFFUSE, mat_diffuse ); glmaterialfv( GL_FRONT, GL_SPECULAR, mat_specular ); glmaterialfv( GL_FRONT, GL_AMBIENT, mat_ambient ); glmaterialfv( GL_FRONT, GL_SHININESS, shininess ); // 拡散反射光の設定 // 鏡面反射光の設定 // 環境光の設定 // 位置と種類の設定 // 宙返り (exrz_angle) を求める関数 void Somersault_calc(void){ double t = 0.0; double ex_tz = 40.0; double v_z= vz0; double v_z1; exrz_angle = 0.0; /* ジャンプして着地するまでのタイムを計る */ while( ex_tz >= 40.0 ){ t = t + dt; v_z1 = v_z + (-g) * dt; ex_tz = ex_tz + (v_z + v_z1) / 2 * dt; v_z = v_z1; 34

35 // 時間刻み [dt] 分の回転角度を求める exrz_angle = / ( t / dt ); // 数値の初期化 vz = vz0; exrz = 0.0; extz = 40.0; // 3D モデルを動かす関数 void move_model(void){ if( move_count == Jumping ){ // 速度の算出 vz1 = vz + (-g) * dt; // 位置の算出 extz = extz + (vz + vz1)/2 * dt; vz = vz1; if( (c % 2) == 0 ){ exrz = exrz + exrz_angle; else if( (c % 3) == 0 ){ は 2 の倍数優先 ) exrz = exrz + exrz_angle * 2; else exrz = exrz - exrz_angle; // 2 の倍数時 // 前方宙返り // 3 の倍数時 (2,3 の倍数のとき // 前方 2 回転 // 後方宙返り if( extz < 40.0 ){ // 数値の初期化 extz = 40.0; 35

36 vz = vz0; exrz = 0.0; c++; // ディスプレイ関数 static void Display( void ) { GLdouble p[16]; // 射影変換行列 GLdouble m[16]; // 座標変換行列 gldrawbuffer( GL_BACK ); glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); // カメラ画像の描画 argldispimage( gartimage, &gartcparam, 1.0, garglsettings ); // 次フレームのキャプチャ指示 arvideocapnext(); gartimage = NULL; // マーカが見つかっていれば if ( gcharacter[0].patt_found ) { // 3D モデルの動作計算関数 //move_model( 1, 360.0, ); p ); // 射影変換行列の適用 arglcamerafrustumrh( &gartcparam, gviewdistancemin, gviewdistancemax, 36

37 glmatrixmode( GL_PROJECTION ); glloadmatrixd( p ); // モデルビュー行列の初期化 glmatrixmode( GL_MODELVIEW ); glloadidentity(); glclear( GL_DEPTH_BUFFER_BIT ); glenable( GL_DEPTH_TEST ); // Z バッファの初期化 // 隠面処理の適用 // 光源の設定 ( 視点に対して固定 ) glpushmatrix(); SetLight( GL_LIGHT0 ); glpopmatrix(); // 座標変換行列の適用 arglcameraviewrh( gcharacter[0].trans, m, gviewscalefactor ); glloadmatrixd( m ); // 3D オブジェクトの描画 glenable( GL_LIGHTING ); // 光源 ON glpushmatrix(); move_model(); // ジャンプ gltranslatef( extx, exty, extz ); glrotatef( exrx, 1.0, 0.0, 0.0 ); // モデルを立たせる (exrx=90) glrotatef( exry, 0.0, 1.0, 0.0 ); glrotatef( exrz, 0.0, 0.0, 1.0 ); mqocallmodel( gcharacter[0].model ); // モデルの描画 glpopmatrix(); gldisable( GL_LIGHTING ); gldisable( GL_DEPTH_TEST ); // 光源 OFF // 隠面処理の解除 37

38 glutswapbuffers(); // バッファの反転 ( ダブルバッファ交換する ) // main 関数 int main( int argc, char** argv ) { int i; // GLUT の初期化 glutinit( &argc, argv ); // カメラのセットアップ if (!SetupCamera( gcparamname, gvconf, &gartcparam ) ) return 0; // マーカのセットアップ for (i=0; i<num_model; i++) { if (!SetupMarker( gpattname[i], &(gcharacter[i].pattid) ) ) return 0; // 描画系のセットアップ if ( gwindowed ) { if (!SetupGraphicsWin( "MQO Loader on ARToolKit - gsub_lite edition", arimxsize, arimysize ) ) return 0; else { if (!SetupGraphicsFull( gfullwidth, gfullheight, gfulldepth, gfullrefresh ) ) return 0; // GLMetaseq の初期化 mqoinit(); // モデルの読み込み 38

39 if ( ( gcharacter[0].model = mqocreatemodel( gmodelname, 0.5 ) ) == NULL ) { printf( " モデルの読み込みに失敗しました " ); return 0; // キャラクタのデータの初期化 for (i=0; i<num_model; i++) { gcharacter[i].patt_found = FALSE; gcharacter[0].patt_width = 60.0; // パターンのサイズ (mm 単位 ) gcharacter[1].patt_width = 80.0; // パターンのサイズ (mm 単位 ) // 宙返り (exrz_angle) 計算 Somersault_calc(); // 終了時に呼ばれる関数の設定 atexit( Quit ); // コールバック関数の設定 glutdisplayfunc( Display ); glutreshapefunc( Reshape ); glutvisibilityfunc( Visibility ); glutkeyboardfunc( Keyboard ); glutmainloop(); return 0; 39

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識 ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識 4 次の画像のキャプチャ指示 5マーカの信頼度の比較 6マーカの位置 姿勢の計算 7バッファの内容を画面に表示

More information

Microsoft Word - 卒業論文 docx

Microsoft Word - 卒業論文 docx - ARToolKit によるマルチマーカの考察 日付 2011 年 1 月 24 日 阪南大学経営情報学部経営情報学科 5107171 筒井亮 5107283 山岡大介 1 目次 第 1 章拡張現実感 (AR: Augmented reality)~はじめに~... 3 第 2 章関連研究... 4 第 3 章 ARToolKit の概要... 6 第 4 章プログラムの構成... 7 第 1 節メイン関数

More information

コンピュータグラフィックスS 演習資料

コンピュータグラフィックスS 演習資料 コンピュータグラフィックス S 演習資料 第 4 回シェーディング マッピング 九州工業大学情報工学部システム創成情報工学科講義担当 : 尾下真樹 1. 演習準備 今回の演習も 前回までの演習で作成したプログラムに続けて変更を行う まずは シェーディングの演習のため 描画処理で 回転する一つの四角すいを描画するように変更する 画面をクリア ( ピクセルデータと Z バッファの両方をクリア ) glclear(

More information

Microsoft Word - 上善_卒論最終版.doc

Microsoft Word - 上善_卒論最終版.doc 現実拡張 (Augment Reality) の ARToolkit による学習 2009 年 2 月 2 日 経営情報学部経営情報学科 gi05126 上善紀明 目次 はじめに 1 現実拡張とは (Augment Reality) 2 ARToolkit 2-1. ARToolkit の概要 2-2. ARToolkit プログラム 2-3. ARToolkit を使用した応用プログラム 3 3DCG

More information

/*p7-1-1*/

/*p7-1-1*/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 /* e8.c Copyright (c) 2003 by T. HAYASHI and

More information

#include <stdio.h> 2 #include <stdlib.h> 3 #include <GL/glut.h> 4 Program 1 (OpenGL GameSample001) 5 // 6 static bool KeyUpON = false; // 7 sta

#include <stdio.h> 2 #include <stdlib.h> 3 #include <GL/glut.h> 4 Program 1 (OpenGL GameSample001) 5 // 6 static bool KeyUpON = false; // 7 sta 1 1. 1 #include 2 #include 3 #include 4 Program 1 (OpenGL GameSample001) 5 // 6 static bool KeyUpON = false; // 7 static bool KeyDownON = false; // 8 static bool KeyLeftON

More information

卒業研究報告書 題目 3DCG と Web カメラの合成を表現するプログラムの制作 指導教員 綿森道夫准教授 報告者 学籍番号 : 氏名 : 尾川景子 平成 23 年 2 月 8 日 高知工科大学電子 光システム工学科 1

卒業研究報告書 題目 3DCG と Web カメラの合成を表現するプログラムの制作 指導教員 綿森道夫准教授 報告者 学籍番号 : 氏名 : 尾川景子 平成 23 年 2 月 8 日 高知工科大学電子 光システム工学科 1 卒業研究報告書 題目 3DCG と Web カメラの合成を表現するプログラムの制作 指導教員 綿森道夫准教授 報告者 学籍番号 :1110157 氏名 : 尾川景子 平成 23 年 2 月 8 日 高知工科大学電子 光システム工学科 1 第 1 章序論... 4 1-1 研究の背景... 4 1-2 研究の概要... 4 1-3 研究の新規性... 4 第 2 章 2 次元イラストの習作... 5

More information

Fair Curve and Surface Design System Using Tangent Control

Fair Curve and Surface Design System Using Tangent Control 情報工学 2016 年度後期第 6 回 [11 月 16 日 ] 静岡大学工学研究科機械工学専攻ロボット 計測情報講座創造科学技術大学院情報科学専攻 三浦憲二郎 講義アウトライン [11 月 16 日 ] ビジュアル情報処理 3 モデリング 3.3 曲線 曲面 OpenGL 色の取り扱い シェーディング 照明モデルと照光処理 拡散光 鏡面光 環境光 ビジュアル情報処理 3-3 曲線 曲面 3-3-1

More information

謗域・ュ逕ィppt

謗域・ュ逕ィppt 情報工学 2017 年度後期第 5 回 [11 月 1 日 ] 静岡大学 工学研究科機械工学専攻ロボット 計測情報講座創造科学技術大学院情報科学専攻 三浦憲二郎 講義日程 第 6 回 11 月 8 日画像処理パート第 1 回 第 7 回 11 月 15 日 CGパート第 6 回 第 8 回 11 月 22 日 CGパート第 7 回 第 9 回 11 月 29 日 CGパート試験 講義アウトライン [11

More information

演算増幅器

演算増幅器 コンピュータグラフィックス 2 前回は GLUT を使った簡単な 2 次元グラフィックスについて習った 今週は以下の項目について 補足していく イベント駆動型プログラムの動作について コンピュータグラフィックスの座標系 イベント駆動型プログラム従来のプログラムとの違いこれまでに学習してきたプログラムは上から下に順次実行され 条件分岐や繰り返し処理によって プログラムの流れ (flow: フロー )

More information

double rx[natom], ry[natom], rz[natom]; 原子の座標 速度 力 ポテンシャルエ double vx[natom], vy[natom], vz[natom]; ネルギーを受ける配列を準備 double fx[natom], fy[natom], fz[natom

double rx[natom], ry[natom], rz[natom]; 原子の座標 速度 力 ポテンシャルエ double vx[natom], vy[natom], vz[natom]; ネルギーを受ける配列を準備 double fx[natom], fy[natom], fz[natom GLUI による MD の GUI 化 前提条件 :GLUI のプログラミング環境が整っていること 3 原子の MD コード ( 下図 ) viewer ウィンドウ内のマウス左クリックで MD 開始 右クリックで MD 停止 control パネルは solid/wireframe を切り替えるチェックボタン 球の滑らかさと半径を決める窓 ( スピナー ) オブジェクトを回転 移動 拡大縮小させるコントローラ

More information

2 2 2 OpenGL Linux Linux Video for Linux(Video4Linux, v4l ) API Video4Linux USB IEEE1394 API Linux Video for Linux 2(Video4Linux2, v4l2 ) OpenCV API U

2 2 2 OpenGL Linux Linux Video for Linux(Video4Linux, v4l ) API Video4Linux USB IEEE1394 API Linux Video for Linux 2(Video4Linux2, v4l2 ) OpenCV API U 1 26 (2) 3DCG TA 2014 10 17 1 OpenGL USB (3DCG) OpenCV CG Augmented Reality ARToolKit 3DCG 1.1 http://www.cyber.t.u-tokyo.ac.jp/~tani/class/mech_enshu/ 1.2 TA 1.3 ( ) USB (2014/11/10( ),11( ),13( )) (2012/11/17(

More information

Microsoft PowerPoint - info_eng3_05ppt.pptx

Microsoft PowerPoint - info_eng3_05ppt.pptx インタラクティブシステム構築法 第 5 回 OpenGL と GLUT の使い方 (3) 埼玉大学情報システム工学科小林貴訓 シェーディング 光源の設定を有効にする glenable(gl_lighting); // 光源の設定を有効にする glenable(gl_light0); //0 番目の光源を有効にする (8 個まで設定可能 ) 光源の位置 GLfloat light0pos[] = {

More information

(4) モデルの消去 mqodeletemodel( model ); (5) 終了処理 ( プログラム終了時にやってください ) mqocleanup(); 3. 使い方 (2) 連番ファイルを読み込んで表示する場合 (1) 初期化 (ARToolKit の場合,argInit() の後に使用 )

(4) モデルの消去 mqodeletemodel( model ); (5) 終了処理 ( プログラム終了時にやってください ) mqocleanup(); 3. 使い方 (2) 連番ファイルを読み込んで表示する場合 (1) 初期化 (ARToolKit の場合,argInit() の後に使用 ) GLMetaseq.h の中身 0810960080 渡部修平 メタセコイアで作成した 3D モデルを OpenGL で表示させるためには, 工学ナビ (http://kougaku-navi.net/artoolkit.html) が公開している C/C++ 用のライブラリ GLMetaseq があります 作成しているプログラムのプロジェクトに GLMetaseq.h と GLMetaseq.c

More information

課題情報シート テーマ名 : AR を利用した高知県内 PR アプリの制作 担当指導員名 : 岡本真一実施年度 : 25 年度施設名 : 四国職業能力開発大学校附属高知職業能力開発短期大学校課程名 : 専門課程訓練科名 : 電子情報技術科課題の区分 : 総合制作実習課題学生数 : 2 時間 : 12

課題情報シート テーマ名 : AR を利用した高知県内 PR アプリの制作 担当指導員名 : 岡本真一実施年度 : 25 年度施設名 : 四国職業能力開発大学校附属高知職業能力開発短期大学校課程名 : 専門課程訓練科名 : 電子情報技術科課題の区分 : 総合制作実習課題学生数 : 2 時間 : 12 課題情報シート テーマ名 : 担当指導員名 : 岡本真一実施年度 : 25 年度施設名 : 四国職業能力開発大学校附属高知職業能力開発短期大学校課程名 : 専門課程訓練科名 : 電子情報技術科課題の区分 : 総合制作実習課題学生数 : 2 時間 : 12 単位 (216h) 課題制作 開発のポイント 開発( 制作 ) のポイント AR アプリケーションの制作には C 言語が利用できる開発環境が必要となります

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

OpenGL & GLUTの基本関数の説明

OpenGL & GLUTの基本関数の説明 コンピュータグラフィックス S 演習資料 OpenGL & GLUT の基本関数の説明 1. OpenGL & GLUT 2. GLUT 2.1. GLUT void glutinit( int argc, char ** argv ); glut void glutinitdysplaymode( unsigned int mode ); mode void glutinitwindowsize(

More information

演算増幅器

演算増幅器 スペースインベーダーもどき 1000 行プログラムの参考として スペースインベーダーもどきのプログラムを配布する いくつか習って いないものもあるので 補足の説明を加えていく 文字列の描画 文字の描画は glutbitmapcharacter() を用いる これは以下のようにして利用する int i; char *str = "Display String"; glcolor3f(0.0, 0.0,

More information

( ) 1 1: 1 #include <s t d i o. h> 2 #include <GL/ g l u t. h> 3 #include <math. h> 4 #include <s t d l i b. h> 5 #include <time. h>

( ) 1 1: 1 #include <s t d i o. h> 2 #include <GL/ g l u t. h> 3 #include <math. h> 4 #include <s t d l i b. h> 5 #include <time. h> 2007 12 5 1 2 2.1 ( ) 1 1: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 #define H WIN 400 // 8 #define W WIN 300 // 9

More information

1 1. Program 1 OpenCV (OpenCV Sample001) 1 /* 2 - > - > - >VC++ 3 ( ) 4 C:\opencv\build\include 5 ( ) 6 C:\opencv\build\x86\vc10\lib 7 - > - > - > - >

1 1. Program 1 OpenCV (OpenCV Sample001) 1 /* 2 - > - > - >VC++ 3 ( ) 4 C:\opencv\build\include 5 ( ) 6 C:\opencv\build\x86\vc10\lib 7 - > - > - > - > 1 1. Program 1 OpenCV (OpenCV Sample001) 1 /* 2 - > - > - >VC++ 3 ( ) 4 C:\opencv\build\include 5 ( ) 6 C:\opencv\build\x86\vc10\lib 7 - > - > - > - > 8 (240 O p e n C V ) 9 opencv_core240d.lib 10 opencv_imgproc240d.lib

More information

Microsoft PowerPoint - 04.pptx

Microsoft PowerPoint - 04.pptx 初期化 コールバック関数の登録 glutmainloop() 描画関数 マウス処理関数 キーボード処理関数などの関数ポインタを登録する イベント待ちの無限ループ 再描画? no マウス入力? no キーボード入力? no yes yes yes 描画関数の呼び出し マウス処理関数の呼び出し キーボード処理関数の呼び出し void keyboard(unsigned char key, int x,

More information

untitled

untitled 2004/12/21 2/2 (11/16) DT-MRI (11/30) /OpenGL 12/7 12/14 (12/21) 1/11 (1/18) OpenGL ~ ~ OpenGL Silicon Graphics, OpenGL ~ ~ OpenGL OpenGL Utility Library (GLU) OpenGL. OpenGL. OpenGL Utility Toolkit (GLUT)

More information

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Training10_プリプロセッサ.docx Training 10 プリプロセッサ 株式会社イーシーエス出版事業推進委員会 1 Lesson1 マクロ置換 Point マクロ置換を理解しよう!! マクロ置換の機能により 文字列の置き換えをすることが出来ます プログラムの可読性と保守性 ( メンテナンス性 ) を高めることができるため よく用いられます マクロ置換で値を定義しておけば マクロの値を変更するだけで 同じマクロを使用したすべての箇所が変更ができるので便利です

More information

3D グラフィックス処理の一般過程 1. 3D グラフィックス処理の一般過程

3D グラフィックス処理の一般過程 1. 3D グラフィックス処理の一般過程 3. 3D ビューイング 1. 3Dグラフィックス処理の一般過程 2. 射影と射影変換 3. ビューボリュームとクリッピング 4. 陰面処理とデプスバッファ 5. ビューポート変換 6. 3Dグラフィックスを描く 7. モデルビュー変換 3D グラフィックス処理の一般過程 1. 3D グラフィックス処理の一般過程 3D グラフィックス処理の一般過程 1. モデリング変換 座標系の異なる複数のオブジェクトを仮想世界に配置し,

More information

コンピューターグラフィックスS

コンピューターグラフィックスS コンピューターグラフィックス S 第 12 回シェーディング マッピング システム創成情報工学科尾下真樹 2018 年度 Q2 今回の内容 前回の復習 シェーディング 光のモデル スムーズシェーディング シェーディング ( 続き ) OpenGL での光源情報の設定 ラジオシティ 影の表現 BRDF マッピング 今回の内容 シェーディング 光の効果の表現 マッピング 生成画像 表面の素材の表現 オブジェクト

More information

コンピュータグラフィックス特論Ⅱ

コンピュータグラフィックス特論Ⅱ コンピュータグラフィックス特論 Ⅱ 第 2 回 OpenGL プログラミングの基礎 九州工業大学尾下真樹 今日の内容 OpenGL プログラミングの基礎 C 言語 +OpenGL+GLUT によるプログラミング 座標変換の基礎 アフィン変換行列を使った視野変換の設定 いずれも 学部の講義 ( レベルの内容 ) の復習 今日の内容 OpenGL&GLUTの概要 サンプルプログラムの概要 座標変換 変換行列の設定

More information

Display 表示の初期化が CAVE 表示の初期化に置き換わり CAVE 用のプログラムに書き換えることが出来る 表 2 1 画面 (Windows LINUX IRIX) 用の OpenGL #include<stdio.h> #include<windows.h> #include<gl/g

Display 表示の初期化が CAVE 表示の初期化に置き換わり CAVE 用のプログラムに書き換えることが出来る 表 2 1 画面 (Windows LINUX IRIX) 用の OpenGL #include<stdio.h> #include<windows.h> #include<gl/g OpenGL による CAVE とファントムへの 3 次元表示 井門俊治 ( いどしゅんじ ) 埼玉工業大学工学部情報システム学科 利用環境 :Windows, LINUX, IRIX, AVS, AVS-MPE, OpenGL,VRML,Java3D 1. 目的 CAVE の表示するためには 従来は OpenGL によるプログラミングが行われていた これに対して 20 00 年末より AVS において

More information

コンピュータグラフィックス特論Ⅱ

コンピュータグラフィックス特論Ⅱ 今日の内容 コンピュータグラフィックス特論 Ⅱ 第 2 回 OpenGL プログラミングの基礎 九州工業大学尾下真樹 OpenGL プログラミングの基礎 C 言語 +OpenGL+GLUT によるプログラミング 座標変換の基礎 アフィン変換行列を使った視野変換の設定 いずれも 学部の講義 ( レベルの内容 ) の復習 今日の内容 OpenGL&GLUTの概要 サンプルプログラムの概要 座標変換 変換行列の設定

More information

コンピュータグラフィックス第8回

コンピュータグラフィックス第8回 コンピュータグラフィックス 第 8 回 レンダリング技法 1 ~ 基礎と概要, 隠面消去 ~ 理工学部 兼任講師藤堂英樹 レポート提出状況 課題 1 の選択が多い (STAND BY ME ドラえもん ) 体験演習型 ( 課題 3, 課題 4) の選択も多い 内訳 課題 1 課題 2 課題 3 課題 4 課題 5 2014/11/24 コンピュータグラフィックス 2 次回レポートの体験演習型 メタセコイア,

More information

コンピューターグラフィックスS

コンピューターグラフィックスS 今日の内容 コンピューターグラフィックス S 第 8 回 () システム創成情報工学科尾下真樹 28 年度 Q2 前回の復習 演習 (2): ポリゴンモデルの描画 変換行列 の概要 座標系 視野変換 射影変換 のまとめ 教科書 ( 参考書 ) コンピュータグラフィックス CG-ATS 協会編集 出版 2 章 ビジュアル情報処理 -CG 画像処理入門 - CG-ATS 協会編集 出版 章 (-2~-3

More information

libaux.dvi

libaux.dvi AUX OpenGL 1 OpenGL (AUX libaux.a) OpenGL Programming Guide () OpenGL 1 OpenGL OS (API) OS OS OS OpenGL Windows Windows X X OpenGL Programming Guide AUX toolkit AUX OS OpenGL SGI OpenGL OS OpenGL AUX Windows

More information

アクション講座 第1回目

アクション講座 第1回目 アクション講座第 1 回目 講師 : ウェンディアーサー (WENDY ARTHUR) 講座資料のプロジェクトファイル (zip ファイル ) はソフメ wiki にアップしてますので予めダウンロードしておいてください 講座資料のプロジェクトファイル (zip ファイル ) は解凍してソリューションファイルを開く URL は下記 http://softmedia.sakura.ne.jp/wiki/2017%e5%b9%b4%e5%ba%a6_%e3%82%a2%e3

More information

スライド 1

スライド 1 グラフィックスの世界第 3 回 サイバーメディアセンター サイバーコミュニティ研究部門安福健祐 Processing によるアニメーション setup と draw void setup() size(400, 400); void draw() ellipse( mousex,mousey,100,100); void とか setup とか draw とかはじめて見る が出てきてややこしい ellipseは円描く関数でした

More information

円筒面で利用可能なARマーカ

円筒面で利用可能なARマーカ 円筒面で利用可能な AR マーカ AR Marker for Cylindrical Surface 2014 年 11 月 14 日 ( 金 ) 眞鍋佳嗣千葉大学大学院融合科学研究科 マーカベース AR 二次元マーカはカメラ姿勢の推定, 拡張現実等広い研究分野で利用されている 現実の風景 表示される画像 デジタル情報を付加 カメラで撮影し, ディスプレイに表示 使用方法の単純性, 認識の安定性からマーカベース

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラマー勉強会 1 回 basic.h 補足 [ 修飾子 ] const 付けた変数は初期化以外で値を設定することができなくなる 定数宣言に使う unsigned 付けた変数は符号がなくなり 正の値しか設定できない [ 条件コンパイル ] #ifdef M ここ以前に M がマクロとして定義されていれば ここ以下をコンパイルする #ifndef M ここ以前に M というマクロが定義されていなければ

More information

Taro-リストⅢ(公開版).jtd

Taro-リストⅢ(公開版).jtd リスト Ⅲ 0. 目次 2. 基本的な操作 2. 1 リストから要素の削除 2. 2 リストの複写 2. 3 リストの連結 2. 4 問題 問題 1 問題 2-1 - 2. 基本的な操作 2. 1 リストから要素の削除 まず 一般的な処理を書き つぎに 特別な処理を書く 一般的な処理は 処理 1 : リスト中に 削除するデータを見つけ 削除する場合への対応 特別な処理は 処理 2 : 先頭のデータを削除する場合への対応

More information

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63> C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

Taro-リストⅠ(公開版).jtd

Taro-リストⅠ(公開版).jtd 0. 目次 1. 再帰的なデータ構造によるリストの表現 1. 1 リストの作成と表示 1. 1. 1 リストの先頭に追加する方法 1. 1. 2 リストの末尾に追加する方法 1. 1. 3 昇順を保存してリストに追加する方法 1. 2 問題 問題 1 問題 2-1 - 1. 再帰的なデータ構造によるリストの表現 リストは データの一部に次のデータの記憶場所を示す情報 ( ポインタという ) を持つ構造をいう

More information

Prog1_6th

Prog1_6th 2012 年 5 月 24 日 ( 木 ) 実施 多分岐のプログラム 前回は多段階の 2 分岐を組み合わせて 3 種類以上の場合分けを実現したが, 式の値の評価によって, 一度に多種類の場合分けを行う多分岐の利用によって見通しのよいプログラムを作成できる場合がある ( 流れ図は右図 ) 式の評価 : 値 1 : 値 2 : 値 n : 該当値無し 処理 1 処理 2 処理 n 既定の処理 switch

More information

Taro-2分探索木Ⅰ(公開版).jtd

Taro-2分探索木Ⅰ(公開版).jtd 2 分探索木 Ⅰ 0. 目次 1. 2 分探索木とは 2. 2 分探索木の作成 3. 2 分探索木の走査 3. 1 前走査 3. 2 中走査 3. 3 問題 問題 1 問題 2 後走査 4. 2 分探索木の表示 - 1 - 1. 2 分探索木とは 木はいくつかの節点と節点同士を結ぶ辺から構成される 2 つの節点 u,v が直接辺で結ばれているとき 一方を親節点 他方を子節点という ある節点の親節点は高々

More information

演算増幅器

演算増幅器 ファイルこれまでにデータの入力方法として キーボードからの入力を用いてきた 構造体を習った際に実感してもらえたと思うが 入力データ量が多いときにはその作業は大変なものとなり 入力するデータを間違えた場合には最初からやり直しになる そこで今回はこれらの問題を解決するため あらかじめ入力データをテキストエディタなどで編集し ファイルとして保存したものを入力データとして用いる方法を習っていく さらにプログラムで作成したデータをファイルに出力する方法も併せて習っていく

More information

Microsoft Word - Cプログラミング演習(10)

Microsoft Word - Cプログラミング演習(10) 第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,

More information

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 第 14 回 応用 情報処理演習 ( テキスト : 第 10 章 ) 画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 特定色の画素の検出 ( テキスト 134 ページ ) 画像データが保存されているファイルを読み込んで, 特定色の画素の位置を検出するプログラムを作成しなさい 元画像生成画像 ( 結果の画像 )

More information

免許法認定公開講座: コンピュータグラフィックス

免許法認定公開講座:コンピュータグラフィックス 演習内容 免許法認定公開講座 : コンピュータグラフィックス 第 6 回 3 次元グラフィックス演習 基本的な3 次元グラフィックスのプログラムを作成 OpenGL を使ったポリゴン描画 視点操作 アニメーション 九州工業大学情報工学部システム創成情報工学科尾下真樹 参考書 最低限の関数は資料で説明 OpenGLの定番の本 ( 高い ) OpenGLプログラミングガイド ( 赤本 ), 12,000

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

コンピューターグラフィックスS

コンピューターグラフィックスS 前回の演習の復習 今日の内容 コンピューターグラフィックス S 第 7 回演習 (2): ポリゴンモデルの描画 システム創成情報工学科尾下真樹 前回の復習 ポリゴンの描画方法 ( 復習 ) 基本オブジェクトの描画 ポリゴンモデルの描画 演習課題 サンプルプログラム 前回の演習の復習 opengl_sample.c 地面と 枚の青い三角形が表示される マウスの右ボタンドラッグで 視点を上下に回転 前回の演習課題.

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

イントロダクション

イントロダクション プログラミング演習 IV 第 7 回マウス, キーボード, サウンド, 文字 埼玉大学情報システム工学科 小林貴訓 マウス入力 クリックイベントのコールバック関数の登録 glutmousefunc(mouse); クリックイベントのコールバック関数 // マウスクリックコールバック関数の指定 static int MouseLB_ON=0; // 左マウスボタン押下フラグ static int MouseRB_ON=0;

More information

kiso2-06.key

kiso2-06.key 座席指定があります Linux を起動して下さい 第6回 計算機基礎実習II 計算機基礎実習II 2018 のウェブページか ら 以下の課題に自力で取り組んで下さい 第5回の復習課題(rev05) 第6回の基本課題(base06) 第5回課題の回答例 ex05-2.c 1. キーボードから整数値 a を入力すると a*a*a の値を出力することを繰り返すプログラムを作成しなさい 2. ただし 入力された

More information

Microsoft Word - mediaJikkenCG_no2_2007.doc

Microsoft Word - mediaJikkenCG_no2_2007.doc 2007 年度メディア情報学実験 1 CG テキスト第 2~4 週 :OpenGL ライブラリを使った 3 次元 CG プログラミング立命館大学情報理工学部メディア情報学科 1. 実験の目的と手順本実験は,(1)OpenGLライブラリを用いたCGプログラミングの手法を学ぶ,(2) プログラミングを通して, CGの基礎技術を体験的に学ぶ,(3) インタラクティブな3 次元 CGアニメーションを作成する方法について学ぶ,

More information

Taro-ファイル処理(公開版).jtd

Taro-ファイル処理(公開版).jtd ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言

More information

第7章 レンダリング

第7章 レンダリング 7 April 11, 2017 1 / 59 7.1 ( ) CG 3 ( ) 2 / 59 7.2 7.2.1 ( ) 3 (rendering) 1 / (hidden line/surface calculation) a (outer normal algorithm) b Z (Z-buffer algorithm) c (scan-line algorithm) 2 (shading)

More information

情報工学実験 Ⅱ グラフィックプログラミング基礎 担当教員名 : 赤嶺有平 提出日 :2010 年 12 月 9 日 学籍番号 : B 氏名 : 大城佳明 - 1 -

情報工学実験 Ⅱ グラフィックプログラミング基礎 担当教員名 : 赤嶺有平 提出日 :2010 年 12 月 9 日 学籍番号 : B 氏名 : 大城佳明 - 1 - 情報工学実験 Ⅱ グラフィックプログラミング基礎 担当教員名 : 赤嶺有平 提出日 :2010 年 12 月 9 日 学籍番号 : 095707 B 氏名 : 大城佳明 - 1 - 課題 1 図形の描画直線やポリゴン, 座標変換を用いて, オリジナルの図形をアニメーション表示するプログラムを作成してください. 1. 18 18 のマス 01 void display(void)

More information

Taro-スタック(公開版).jtd

Taro-スタック(公開版).jtd 0. 目次 1. 1. 1 配列によるの実現 1. 2 再帰的なデータ構造によるの実現 1. 3 地図情報処理 1. 4 問題 問題 1 グラフ探索問題 - 1 - 1. は データの出し入れが一カ所で行われ 操作は追加と削除ができるデータ構造をいう 出入口 追加 削除 操作 最初 111 追加 111 222 追加 111 222 333 追加 111 222 333 444 追加 111 222

More information

第3章 OpenGL の基礎

第3章 OpenGL の基礎 3 OpenGL April 11, 2017 1 / 28 3.1 ( ) OpenGL OpenGL 2 / 28 3.2 OpenGL OpenGL OpenGL (Open Graphics Library) Silicon Graphics, Inc. 2 3 API (Application Program Interface) [4] UNIX OS Windows Macintosh

More information

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2 問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは 400 200 と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2 for 文を用いて図 3 の様な図形を描くプログラムを作成せよ 但し ウィンドウのサイズは 300 300

More information

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

AR技術を用いたグリーティングカード作成ソフトの開発

AR技術を用いたグリーティングカード作成ソフトの開発 平成 25 年度卒業研究中間発表 所属大隈研究室指導教員大隈ひとみ発表者渡邉賢明 目次 1. はじめに 2. テーマ変更について 3. 使用ソフトについて 4. 現在までにできていることについて 5. CG 映し出しのプログラムの説明と問題点 6. 音声再生のプログラムと改良点 7. 今後の課題 8. 開発環境 9. 参考文献 IKEA の事例 1. はじめに 筒井浩平氏 Android 端末での

More information

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx コンテンツ メディア プログラミング実習 Ⅰ コンピュータグラフィックス編 1 幾何変換 橋本直 今日大事なのは プログラムをじっくり読んで なぜそうなるか? を考えよう 命令によって起きていることを頭の中でイメージしよう 2 本題の前に確認 Processingでは画面の 左上隅 が原点 (0,0) x 軸の正の向きは 右 y 軸の正の向きは 下 x y : (0,0) 3 幾何変換の基本 4 幾何変換とは

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - kougi9.ppt C プログラミング演習 第 9 回ポインタとリンクドリストデータ構造 1 今まで説明してきた変数 #include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { double x; double y; char buf[256]; int i; double start_x; double step_x; FILE*

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 前回の出席確認演習 #include int main() { FILE *fp; int c, linecount, length, maxlength; fp=fopen("/usr/share/dict/words","r"); if (fp == NULL) return 1; linecount=0; length=0;

More information

プログラミング基礎

プログラミング基礎 C プログラミング 演習 アルゴリズム基礎論 演習 第 10 回 今後の予定 12/22( 月 ) 期末試験 (60 分間 ) 場所 :A1611 時間 :16:20~17:20 課題の最終提出締切 :12/19( 金 ) これ以降の新規提出は評価されない 12/22までに最終状況を提示するので, 提出したのに や になってる人は自分の提出内容や提出先を再確認した上で12/26までに問い合わせること

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

コンピュータグラフィックス特論Ⅱ

コンピュータグラフィックス特論Ⅱ コンピュータグラフィックス特論 Ⅱ 第 1 回コンピュータグラフィックスの基礎 九州工業大学尾下真樹 2019 年度 本日の内容 ガイダンス コンピュータグラフィックスの概要と応用 3 次元グラフィックスの要素技術 3 次元グラフィックスのプログラミング 演習問題 授業担当 尾下真樹 ( おしたまさき ) 居室 : 研究棟 W623 e-mail: oshita@ces.kyutech.ac.jp

More information

Microsoft Word - mediaJikkenCG_no2_2012.doc

Microsoft Word - mediaJikkenCG_no2_2012.doc 2012 年度メディア情報学実験 1 CG テキスト第 2~5 週 :OpenGL ライブラリを使った 3 次元 CG プログラミング立命館大学情報理工学部メディア情報学科 1. 実験の目的と手順本実験は,(1)OpenGLライブラリを用いたCGプログラミングの手法を学ぶ,(2) プログラミングを通して, CGの基礎技術を体験的に学ぶ,(3) インタラクティブな3 次元 CGアニメーションを作成する方法について学ぶ,

More information

Microsoft PowerPoint - 15Game.ppt

Microsoft PowerPoint - 15Game.ppt ゲームの作成 マインスイーパの概要マインスイーパの準備マインスイーパの完成マインスイーパの改良 マインスイーパの概要 ゲームの目的 地雷が隠れているマス目を開けずに ( できるだけ早く ) すべての地雷を見つけること ゲームの勝敗 スコア 地雷を掘り出したら負け 地雷以外を全部開けたら勝ち ( 所要時間は短いほうが良い ) ゲームのやり方 マス目の座標を入力してマス目を開く 表示される数字は隣接する周囲のマス目に隠れている地雷の数を示す

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ arduino プログラミング課題集 ( Ver.5.0 2017/06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイコンから伝える 外部装置の状態をマイコンで確認する 信号の授受は 入出力ポート 経由で行う (2) 入出力ポートとは?

More information

PowerPoint Presentation

PowerPoint Presentation ファイルの入出力 芝浦工業大学情報工学科 青木義満 今回の講義内容 ファイル入出力 ファイルからのデータ読込み ファイルと配列 2 1 ファイルへのデータ書き込み ( 復習 ) ソースファイル名 :fileio1.c データをファイルに書き込み #include int main(void) { ファイルポインタ宣言 int student_id = 100; char name[

More information

file:///D|/C言語の擬似クラス.txt

file:///D|/C言語の擬似クラス.txt 愛知障害者職業能力開発校 システム設計科 修了研究発表会報告書 題名 : C 言語の擬似クラス あらまし : C 言語でクラスを作れるという噂の真偽を確かめるために思考錯誤した まえがき : VC++ や Java その他オブジェクト指向の言語にはクラスが存在して クラスはオブジェクトの設計図である 手法 : C++ のクラスを解析して C++ のクラスを作成して C 言語に翻訳する class struct

More information

kiso2-09.key

kiso2-09.key 座席指定はありません 計算機基礎実習II 2018 のウェブページか 第9回 ら 以下の課題に自力で取り組んで下さい 計算機基礎実習II 第7回の復習課題(rev07) 第9回の基本課題(base09) 第8回試験の結果 中間試験に関するコメント コンパイルできない不完全なプログラムなど プログラミングに慣れていない あるいは複雑な問題は 要件 をバラして段階的にプログラムを作成する exam08-2.c

More information

第7章 レンダリング

第7章 レンダリング 7 May 18, 2012 1 / 60 71 ( ) CG 3 ( ) 2 / 60 72 71 ( ) 3 (rendering) 1 / (hidden line/surface calculation) a (outer normal algorithm) b Z (Z-buffer algorithm) c (scan-line algorithm) 2 (shading) a (flat

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/

More information

manual.dvi

manual.dvi ' & VR CompleXcope $ % 1 2 509{5292 322{6 1) kage@tokitheorynifsacjp 2) sato@tokitheorynifsacjp CompleXcope Programming Guide, Ver 1, by A Kageyama and T Sato, August 1998 1 CompleXcope 5 11 : : : : :

More information

スライド 1

スライド 1 Graphics with Processing 2008-12 モデリング http://vilab.org 塩澤秀和 1 12.1 3D モデリング モデリング 3Dモデルを作り上げること オブジェクト座標系で基本図形やポリゴンを組み合わせる テクスチャ x テクスチャ z y 2 12.2 オブジェクトの関数例 複雑なオブジェクトは, 大きさ 1 を目安としてモデリングし, 関数にしておくと利用しやすい

More information

コンピューターグラフィックスS

コンピューターグラフィックスS コンピューターグラフィックス S 第 2 回コンピュータグラフィックスの要素技術 システム創成情報工学科尾下真樹 2018 年度 Q2 今回の内容 前回の復習 コンピュータグラフィックスの歴史と応用 3 次元グラフィックスの要素技術 3 次元グラフィックス プログラミング 教科書 ( 参考書 ) コンピュータグラフィックス CG-ARTS 協会編集 出版 (3,200 円 ) 1~5 章の概要 ビジュアル情報処理

More information

ゲームエンジンの構成要素

ゲームエンジンの構成要素 cp-3. 計算 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 自由落下距離四則演算例題 2. 三角形の面積浮動小数の変数, 入力文, 出力文, 代入文例題 3. sin 関数による三角形の面積ライブラリ関数 2 今日の到達目標 プログラムを使って, 自分の思い通りの計算ができるようになる

More information

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - kougi7.ppt C プログラミング演習 第 7 回メモリ内でのデータの配置 例題 1. 棒グラフを描く 整数の配列から, その棒グラフを表示する ループの入れ子で, 棒グラフの表示を行う ( 参考 : 第 6 回授業の例題 3) 棒グラフの1 本の棒を画面に表示する機能を持った関数を補助関数として作る #include "stdafx.h" #include void draw_bar( int

More information

Microsoft Word - Cプログラミング演習(9)

Microsoft Word - Cプログラミング演習(9) 第 9 回 (6/18) 3. ファイルとその応用 外部記憶装置に記録されたプログラムやデータを, ファイルと呼ぶ シーケンシャルファイルやランダムファイルへのデータの記録や読み出し, 更新の手順について学習する (1) ファイルとレコードファイル複数の関連したデータを一つに集めたり プログラムを外部記憶装置に保存したものレコードファイルを構成する一塊のデータ ex. 個人カードフィールドレコードを構成する個別の要素

More information

‚æ4›ñ

‚æ4›ñ ( ) ( ) ( ) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 (OUS) 9 26 1 / 28 ( ) ( ) ( ) A B C D Z a b c d z 0 1 2 9 (OUS) 9

More information

目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature

目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature MECodecAPI Reference Manual 2015 年 9 月 1 日 MEDIAEDGE 株式会社 目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature...

More information

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; Point; 問題 18. 問題 17 の Point を用いて 2 点の座標を入力するとその 2 点間の距 離を表示するプログラムを作成せよ 平方根は

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体

More information

2008 年度下期未踏 IT 人材発掘 育成事業採択案件評価書 1. 担当 PM 田中二郎 PM ( 筑波大学大学院システム情報工学研究科教授 ) 2. 採択者氏名チーフクリエータ : 矢口裕明 ( 東京大学大学院情報理工学系研究科創造情報学専攻博士課程三年次学生 ) コクリエータ : なし 3.

2008 年度下期未踏 IT 人材発掘 育成事業採択案件評価書 1. 担当 PM 田中二郎 PM ( 筑波大学大学院システム情報工学研究科教授 ) 2. 採択者氏名チーフクリエータ : 矢口裕明 ( 東京大学大学院情報理工学系研究科創造情報学専攻博士課程三年次学生 ) コクリエータ : なし 3. 2008 年度下期未踏 IT 人材発掘 育成事業採択案件評価書 1. 担当 PM 田中二郎 PM ( 筑波大学大学院システム情報工学研究科教授 ) 2. 採択者氏名チーフクリエータ : 矢口裕明 ( 東京大学大学院情報理工学系研究科創造情報学専攻博士課程三年次学生 ) コクリエータ : なし 3. プロジェクト管理組織 株式会社オープンテクノロジーズ 4. 委託金支払額 3,000,000 円 5.

More information

第3章 OpenGL の基礎

第3章 OpenGL の基礎 3 OpenGL April 20, 2012 1 / 23 31 ( ) OpenGL OpenGL 2 / 23 32 OpenGL OpenGL OpenGL (Open Graphics Library) Silicon Graphics, Inc 2 3 API (Application Program Interface) [4] UNIX OS Windows Macintosh CAD

More information

Microsoft PowerPoint - kougi8.ppt

Microsoft PowerPoint - kougi8.ppt C プログラミング演習 第 8 回構造体とレコードデータファイル 1 例題 1. バイナリファイル形式のファイル からのデータ読み込み 次のような名簿ファイル ( バイナリファイル形式 ) を読み込んで, 画面に表示するプログラムを作る name Ken Bill Mike age 20 32 35 address NewYork HongKong Paris 名簿ファイル 2 #include "stdafx.h"

More information

[課題案]

[課題案] デザイン情報演習 Ⅴ 課題その 2 テーマ : 実世界指向インタラクション ディスプレイを覗くと世界が変わる 私たちの実世界での活動を支援する新しいインタラクションシステムを構築する. KEYWORD: 実世界指向インターフェース, タンジブルインターフェース (tangible interface) ミックスドリアリティ (Mixed Reality; 複合現実感 ) オーグメンティドリアリティ

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード] if 文 (a と b の大きい方を表示 ) C 言語 Ⅰ の復習 条件判定 (if, 条件式 ) ループ (for[ 二重まで ], while, do) 配列 ( 次元 次元 ) トレース int a, b; printf( 整数 a: ); scanf( %d, &a); printf( 整数 b: ); scanf( %d, &b); //つのif 文で表現する場合間違えやすい どっちに =

More information

本資料のご使用につきましては 次の点にご留意願います 本資料の内容については 予告無く変更することがあります 1. 本資料の一部 または全部を弊社に無断で転載 または 複製など他の目的に使用することは堅くお断りいたします 2. 本資料に掲載される応用回路 プログラム 使用方法等はあくまでも参考情報で

本資料のご使用につきましては 次の点にご留意願います 本資料の内容については 予告無く変更することがあります 1. 本資料の一部 または全部を弊社に無断で転載 または 複製など他の目的に使用することは堅くお断りいたします 2. 本資料に掲載される応用回路 プログラム 使用方法等はあくまでも参考情報で FSA サンプルプログラムマニュアル - 姿勢検出 - Rev.1.0 本資料のご使用につきましては 次の点にご留意願います 本資料の内容については 予告無く変更することがあります 1. 本資料の一部 または全部を弊社に無断で転載 または 複製など他の目的に使用することは堅くお断りいたします 2. 本資料に掲載される応用回路 プログラム 使用方法等はあくまでも参考情報であり これらに起因する第三者の知的財産権およびその他の権利侵害あるいは損害の発生に対し

More information

Prog1_15th

Prog1_15th 2012 年 7 月 26 日 ( 木 ) 実施構造体と typedef typedef 宣言によって,struct 構造体タグ名という表記を再定義し, データ型名のように扱うことができる 構文は typedef struct 構造体タグ名 再定義名 ; となり, この場合の構造体変数の宣言は, 再定義名を用いて行うことができる なお, ここでは 構造体タグ名は省略可能である 構造体を指すポインタ

More information

program7app.ppt

program7app.ppt プログラム理論と言語第 7 回 ポインタと配列, 高階関数, まとめ 有村博紀 吉岡真治 公開スライド PDF( 情報知識ネットワーク研 HP/ 授業 ) http://www-ikn.ist.hokudai.ac.jp/~arim/pub/proriron/ 本スライドは,2015 北海道大学吉岡真治 プログラム理論と言語, に基づいて, 現著者の承諾のもとに, 改訂者 ( 有村 ) が加筆修正しています.

More information

Microsoft PowerPoint - C_Programming(3).pptx

Microsoft PowerPoint - C_Programming(3).pptx H23 年度秋学期情報スキル活用 入門 担当 : 田中基彦 ( 工学部共通教育科 ) Email: ak_tanaka@isc.chubu.ac.jp 授業のホームページ学術情報センター > 教育支援 > 情報リテラシー 授業の日程 講義内容提出課題 連絡事項を掲載 > 定期的にアクセスして確認する C 言語によるプログラミング (3) 制御文 繰り返し文 if, while, switch, for,

More information

memo

memo 計数工学プログラミング演習 ( 第 4 回 ) 2016/05/10 DEPARTMENT OF MATHEMATICA INFORMATICS 1 内容 リスト 疎行列 2 連結リスト (inked ists) オブジェクトをある線形順序に並べて格納するデータ構造 単方向連結リスト (signly linked list) の要素 x キーフィールド key ポインタフィールド next x->next:

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information