演算増幅器

Similar documents
演算増幅器

第3章 OpenGL の基礎

第3章 OpenGL の基礎

準備 計算結果を可視化するために OpenGL を 利用する. 2

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

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

謗域・ュ逕ィppt

$ ls -l $ ls -l -a $ ls -la $ ls -F $ ls <dirname> <dirname> $ cd <dirname> <dirname> $ cd $ pwd $ cat <filename> <filename> $ less <filename> <filena

j x j j j + 1 l j l j = x j+1 x j, n x n x 1 = n 1 l j j=1 H j j + 1 l j l j E

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

沼津工業高等専門学校

untitled

謗域・ュ逕ィppt

謗域・ュ逕ィppt

2 2 GLUI 2 GLUI 2.1 GLUI GLUI OpenGL OpenGL glut OpenGL glut C++ Linux, Windows (Visual C++, gcc), Macintosh glut glut GUI glut GUI CG glmultmatrix()

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 - > - > - > - >

#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

libaux.dvi

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

( ) 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>

2 2 2 OpenGL (R,G,B,A) 2.1 OpenGL (x y) width height pixels void glreadpixels(glint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum t

Microsoft PowerPoint - 04.pptx

2 3 OpenGL 2 OpenGL OpenGL(Open Graphics Library) Silicon Graphics (SGI) 3D OpenGL SGI HP, SUN, IBM UNIX Linux, FreeBSD PC UNIX Windows, Mac OS API PD

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

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

2 T ax 2 + 2bxy + cy 2 + dx + ey + f = 0 a + b + c > 0 a, b, c A xy ( ) ( ) ( ) ( ) u = u 0 + a cos θ, v = v 0 + b sin θ 0 θ 2π u = u 0 ± a

2 2 OpenGL ( ) OpenGL ( ) glclearcolor(glclampf red, GLclampf green, GLclampf

2 2 OpenGL OpenGL OpenGL(Open Graphics Library) Silicon Graphics (SGI) 3D OpenGL SGI HP, SUN,

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

PowerPoint Presentation

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

スライド 1

$ pwd /home1/t0/t0903 / / /home1/t0/t0903 / / /home1/t0/t0903 / /... ~ $ ls $ ls -a

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

Microsoft PowerPoint - kougi2.ppt

Microsoft Word - 415Illustrator

/*p7-1-1*/

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

ToDo: 今回のタイトル

pp2018-pp9base

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

Microsoft PowerPoint - kougi7.ppt

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

OpenGL Programming Course OpenGL Programming Course FAQ

1/2

2 : 2008/12/ /01/ G :

1) OOP 2) ( ) 3.2) printf Number3-2.cpp #include <stdio.h> class Number Number(); // ~Number(); // void setnumber(float n); float getnumber();

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

PowerPoint プレゼンテーション

pp2018-pp4base

PowerPoint Presentation

第9回 配列(array)型の変数

Microsoft Word - 3new.doc

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

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

Microsoft PowerPoint - 11.pptx

DVIOUT

第1回 プログラミング演習3 センサーアプリケーション

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

JavaプログラミングⅠ

イントロダクション

プログラム言語及び演習Ⅲ

演算増幅器

Microsoft PowerPoint - info_eng3_05ppt.pptx

cp-7. 配列

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

1 level Level swtich ButtonPress ButtonRelease Expose Level

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

Cプログラミング1(再) 第2回

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

memo

一方, 物体色 ( 色や光を反射して色刺激を起こすもの, つまり印刷物 ) の表現には, 減法混色 (CMY) が用いられる CMY の C はシアン (Cyn),M はマゼンタ (Mgent),Y はイエロー (Yellow) であり, これらは色の 3 原色と呼ばれるものである なお, 同じシア

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

スライド 1

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

演算増幅器

kiso2-06.key

第2回

PowerPoint プレゼンテーション

Sample 本テキストの作成環境は 次のとおりです Windows 7 Home Premium Microsoft Excel 2010( テキスト内では Excel と記述します ) 画面の設定( 解像度 ) ピクセル 本テキストは 次の環境でも利用可能です Windows

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

piyo0702a.rtfd

C B

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

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

Microsoft PowerPoint - guidance.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

Microsoft PowerPoint - kougi6.ppt

2 2 OpenGL ( ) 2 OpenGL ( ) glclearcolor(glclampf red, GLclampf green, GLclampf blu

Java講座

Prog2_9th

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft PowerPoint - OOP.pptx

x h = (b a)/n [x i, x i+1 ] = [a+i h, a+ (i + 1) h] A(x i ) A(x i ) = h 2 {f(x i) + f(x i+1 ) = h {f(a + i h) + f(a + (i + 1) h), (2) 2 a b n A(x i )

簡単ラベル作成 印刷マニュアル

C C UNIX C ( ) 4 1 HTML 1

スライド 1

Transcription:

コンピュータグラフィックス 2 前回は GLUT を使った簡単な 2 次元グラフィックスについて習った 今週は以下の項目について 補足していく イベント駆動型プログラムの動作について コンピュータグラフィックスの座標系 イベント駆動型プログラム従来のプログラムとの違いこれまでに学習してきたプログラムは上から下に順次実行され 条件分岐や繰り返し処理によって プログラムの流れ (flow: フロー ) に従って実行される これを特にフロー駆動型プログラムと呼ぶ それに対して イベント (event: 出来事 ) の発生に対して 実行される内容が変化するプログラムのことをイベント駆動型プログラムと呼ぶ 例えば コントローラーからの入力に反応してキャラクタが行動するゲームプログラムはまさにこれに当たる この場合 プログラムはイベントを監視し 発生したイベントに応じた動作を記述することになる このイベントの監視と対応する動作をあわせて イベントハンドラと呼ぶ glut を使ったプログラムはこのイベント駆動型のプログラムである 作成したウィンドウの縮小 拡大や マウスやキーボードからの入力といったイベントに対応してプログラムが実行される 簡単な仕組みイベントはイベントキュー (event queue) と呼ばれるデータ構造に格納される キューに格納されたイベントは格納された順に取り出され ( 先入れ先出し [FIFO:First In, First Out]) それに対応する処理を行う イベントに対応する処理はコールバック関数 (callback function) を使って記述する プログラムは実行時にイベントループと呼ばれる繰り返し処理が行われ これによってイベントの監視とそれに対応する処理を行い続ける 前回のテキストのプログラム例 2では display() がコールバック関数にあたり glutmainloop() がイベントループの実行にあたる 以下にプログラムを再掲しておく 前回のテキストのプログラム例 2 ウィンドウを表示する #include <stdio.h> #include <GL/glut.h> void init_opengl(void); void display(void); int main(int argc, char *argv[]) glutinitwindowposition(100, 100); glutinitwindowsize(200, 200); glutinit(&argc, argv); glutinitdisplaymode(glut_rgba); - 1 - // OpenGLの初期化 // コールバック関数 glutdisplayfunc() 用 // ウィンドウの表示位置の指定 // ウィンドウサイズの指定 // GLUTの初期化 // 表示モードの指定

glutcreatewindow("create window"); glutdisplayfunc(display); init_opengl(); glutmainloop(); // ウィンドウを生成 // 描画イベント時のコールバック関数の設定 // OpenGLに関する初期化一度だけ呼ばれる // GLUTに関する無限ループ return 0; void init_opengl(void) glclearcolor(1.0, 1.0, 1.0, 1.0); // 赤青緑と透明度の設定この場合は白となる void display(void) glclear(gl_color_buffer_bit); glflush(); 座標系について コンピュータを使って図を描く場合 以下に示す座標系を区別する必要がある ワールド座標系(world coordinates) またはオブジェクト座標系 (object coordinates) 空間上に物体や図形を配置するために用いられる座標系 いわゆる数学で学んでいる座標だと思ってよい 単位 ([m] や [mm]) についてはプログラマが自由に決めて 対応するようにプログラムを記述することになる 極端な例として 超大規模集積回路の設計ならばミクロン 天文学の問題を解くならば光年でも良い ディスプレイ座標系 (window coordinates) または画面座標系 (screen coordinates) ディスプレイ上の座標系 実際に表示するのに使う この座標系の単位はピクセル (pixel) となる ピクセルは画素とも呼ばれる OpenGL では表示処理の一部として ワールド座標系からディスプレイ座標系への変換を自動的に行っている この変換に必要な情報は 表示するウィンドウのサイズ と オブジェクト座標系でどの範囲を表示したいのか ウィンドウのどの位置に表示したいのか である 表示するウィンドウのサイズ は glutinitwindowsize() で指定する プロトタイプ宣言は以下である void glutinitwindowsize(int width, int height); この関数は glcreatewindow() で作成するウィンドウの初期サイズを指定する width は幅で height は高さであり 単位はピクセルで指定する ( 図 1 参照 ) オブジェクト座標系でどの範囲を表示したいのか は gluortho2d() で指定する プロトタイプ宣言は以下である - 2 -

void gluortho2d(gldouble left, GLdouble right, GLdouble bottom, GLdouble top); GLdouble は OpenGL 用の変数の型であり 通常の double と同じと考えて良い この関数の引数 left right bottom top によって ディスプレイに描くワールド座標系の四角形領域を指定する ( 図 1 参照 ) 前回のプログラムではこの処理を省略していた その場合にはウィンドウの座標は左下が (-1,-1) 右上が(1,1) で設定された状態となっている ウィンドウのどの位置に表示したいのか は glviewport() で指定する プロトタイプ宣言は以下である void glviewport(glint x, GLint y, GLint w, GLint h); GLint は OpenGL 用の変数の型であり 通常の int と同じと考えて良い この関数の引数 x と y はウィンドウに描くワールド座標系の左下の位置を指定し w と h はサイズを示している ( 図 1 参 照 ) 単位はピクセルである y top h w left right x bottom height x y width 図 1 ワールド座標系とウィンドウ座標系の関係 座標系を指定したプログラムの例 前回までのプログラムではウィンドウを変形するとそれに応じて図 2 のように描いた図形が変 形した これはワールド座標系とウィンドウ座標系の対応がくずれたためである - 3 -

図 2 描画図形の変形 そこで ワールド座標系とウィンドウ座標系を指定し ウィンドウサイズを変化させても形が変 わらないプログラム例を示す このプログラムは前回のテキストのプログラム例を変更したもので ある 変更部分は太字で示した プログラム例 1 #include <stdio.h> #include <GL/glut.h> void init_opengl(void); void display(void); void resize(int w, int h); // OpenGLの初期化 // コールバック関数 glutdisplayfunc() 用 // コールバック関数 glutreshapefunc() 用 int main(int argc, char *argv[]) glutinitwindowposition(100, 100); // ウィンドウの表示位置の指定 glutinitwindowsize(200, 200); // ウィンドウサイズの指定 glutinit(&argc, argv); // GLUTの初期化 glutinitdisplaymode(glut_rgba); // 表示モードの指定 glutcreatewindow("2d oekaki"); // ウィンドウを生成 glutdisplayfunc(display); // 描画イベント時のコールバック関数の設定 glutreshapefunc(resize); // ウィンドウサイズ変更イベント時のコールバック関数の設定 init_opengl(); glutmainloop(); // OpenGL に関する初期化一度だけ呼ばれる // GLUT に関する無限ループ return 0; void init_opengl(void) glclearcolor(1.0, 1.0, 1.0, 1.0); // ウィンドウを白で描画 void display(void) - 4 -

glclear(gl_color_buffer_bit); glcolor3f(0.0, 0.0, 1.0); glbegin(gl_triangles); glvertex2f(-0.9, -0.9); glvertex2f( 0.9, -0.9); glvertex2f(-0.9, 0.9); glend(); glcolor3f(1.0, 1.0, 0.0); glbegin(gl_quads); glvertex2f( 0.2, 0.2); glvertex2f( 0.2, 0.6); glvertex2f( 0.6, 0.6); glvertex2f( 0.6, 0.2); glend(); // 色をRGBで指定この場合は青 // 開始三角形を描く // 頂点を指定 // 終了 // 色をRGBで指定この場合は黄色 // 開始四角形を描く // 頂点を指定 // 終了 glflush(); void resize(int w, int h) glloadidentity(); // 変換行列を単位行列に設定 // 描画するワールド座標系の範囲を指定 gluortho2d(-w / 200.0, w / 200.0, -h / 200.0, h / 200.0); glviewport(0, 0, w, h); // ウィンドウの描画領域を指定 着目すべきはコールバック関数 resize() 内でのプログラムの記述である glloadidentity() は変換行列を単位行列に設定している部分であるが 詳しい説明はここでは省略する 今の段階では resize 関数内の gluortho2d() と glviewport() とセットで使うと思っておけばよい gluortho2d() は描画するワールド座標系の範囲を指定している この場合には glutinitwindowsize で指定したウィンドウサイズ幅 200 高さ 200 の情報を利用して 1 ピクセルがワールド座標の 0.01 になるように調整している glviewport() は作成したウィンドウの全領域を描画領域とするように指定している 図 3にこのプログラムの実行結果を示す ウィンドウを変形しても 図形の大きさが変更されないことがわかる - 5 -

図 3 座標系を指定したプログラム : ウィンドウを変形しても描画した図形のサイズが変更されていないことがわかる 演習演習 1 プログラム例 1を作成し ウィンドウを拡大 縮小しても描画する図形が変化しないことを確認しなさい また glutinitwindowsize() gluortho2d() glviewport() の引数に与える値を変更し 図 1に示したワールド座標系とウィンドウ座標系の関係を理解しなさい 課題 9 前回と今回の演習を踏まえ オリジナルの図形を作成しなさい ただし OpenGL の練習を兼ねているので 図形の数が多く 複雑なものほど評価は高い また 座標の指定方法を確認することが目的であるので 三角形なら三角形 平行四辺形なら平行四辺形とはっきり示すことができたかを評価する 図形の描画を行う関数部分のソースファイル ( テキストの例の場合では display()) と描画した画像を印刷したものを提出すること 画像の取得方法はウィンドウをアクティブ ( ウィンドウを選択するとタイトル部分が濃い色に変わる この状態のこと ) にし Alt + PrintScreen を押す 保存画面が表示されるので 保存を行う デフォルトでは自分のルートディレクトリに保存される 補足 : 円を描く OpenGL で円を描く場合には多角形の近似として描く 具体的には以下のようなプログラムにな る 今回のプログラム例 1 の display() を以下に置き換えると円が描画される 円を描く glbegin(gl_polygon); を glbegin(gl_line_loop); に変更すると線画になる void display(void) int i; float rad; glclear(gl_color_buffer_bit); glcolor3f(0.0, 1.0, 0.0); // 色をRGBで指定この場合は緑 glbegin(gl_polygon); for(i = 0; i < 360; i++) rad = M_PI * (i / 180.0); glvertex2f(0.9 * sin(rad), 0.9 * cos(rad)); // 頂点を指定 glend(); // 終了 glflush(); - 6 -

- 7 -