謗域・ュ逕ィppt

Similar documents
謗域・ュ逕ィppt

謗域・ュ逕ィppt

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

演算増幅器

Fair Curve and Surface Design System Using Tangent Control

libaux.dvi

OpenGL & GLUTの基本関数の説明

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

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

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

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

untitled

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

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

第3章 OpenGL の基礎

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

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

/*p7-1-1*/

第3章 OpenGL の基礎

OpenGL Programming Course OpenGL Programming Course FAQ

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

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

演算増幅器

JAPLAシンポジウム資料 2009/12/5

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

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 - info_eng3_05ppt.pptx

Microsoft PowerPoint - 04.pptx

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

沼津工業高等専門学校

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

Prog1_6th

スライド 1

スライド 1

Microsoft Word - mediaJikkenCG_no2_2007.doc

/* drawing function */ function_graph();// drawing graph glflush(); int main(int argc, char **argv ) glutinit( &argc, argv ); glutinitdisplaymode( GLU

JAPLA研究会資料 2010/4/24

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

1 3 2 OpenGL 4 3 OpenGL 5 4 OpenGL 6 OpenGl : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6 : : : : : : : : : : : : : : : : : : : : :

Microsoft Word - mediaJikkenCG_no2_2012.doc

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

2 : 2008/12/ /01/ G :

test_cylpyd

スライド 1

NB

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

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

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

JAPLA研究会資料 /6/15

スライド 1

1 OpenGL OpenGL OpenGL OpenGL

memo

slide5.pptx

JAPLA研究会資料 2013/5/25

manual.dvi

5. p.1/37

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

10 B 3. ( ) (3)

WebGL OpenGL GLSL Kageyama (Kobe Univ.) Visualization / 57

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

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

CG

スライド 1

PowerPoint プレゼンテーション

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

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

WebGL Safari WebGL WebGL Safari Kageyama (Kobe Univ.) / 5

CG

JAPLA研究会資料 2010/1/23

kiso2-09.key

スライド 1

Microsoft PowerPoint - kougi2.ppt

Microsoft Word - C.....u.K...doc

WebGL X LR301 Kageyama (Kobe Univ.) Visualization / 45

助成研究者紹介 たなかしげのり 田中成典 現職 : 関西大学総合情報学部教授 ( 博士 ( 工学 )) 主な著書 論文 : 3 次元関連 デジカメ活用によるデジタル測量入門 ( 森北出版, 平成 12 年 ). DirectX8 & VC++ -3D の基礎とゲームの作り方 -( 工学社, 平成 1

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

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

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

PowerPoint Presentation

JAPLA研究会資料 2017/5/20

OpenGL GLSL References Kageyama (Kobe Univ.) Visualization / 58

XAML Do-It-Yourself シリーズ 第 12 回 3D グラフィックス -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

memo

Microsoft PowerPoint - kougi9.ppt

PowerPoint プレゼンテーション

tuat1.dvi

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

ex01.dvi

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

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 )

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 - 計算機言語 第7回.ppt

02: 変数と標準入出力

卒 業 研 究 報 告.PDF

DVIOUT

02: 変数と標準入出力

JAPLA研究会資料 2012/8/2

Transcription:

情報工学 2017 年度後期第 5 回 [11 月 1 日 ] 静岡大学 工学研究科機械工学専攻ロボット 計測情報講座創造科学技術大学院情報科学専攻 三浦憲二郎

講義日程 第 6 回 11 月 8 日画像処理パート第 1 回 第 7 回 11 月 15 日 CGパート第 6 回 第 8 回 11 月 22 日 CGパート第 7 回 第 9 回 11 月 29 日 CGパート試験

講義アウトライン [11 月 1 日 ] ビジュアル情報処理 2 モデリング 2.1 形状モデル 2.2 ソリッドモデルの形状表現 OpenGL 投影変換 メニューの作成

ビジュアル情報処理 2 モデリング 2-1 形状モデル

ビジュアル情報処理 2-2 ソリッドモデルの形状表現 2-2-1 CSG 表現

ビジュアル情報処理 2-2 ソリッドモデルの形状表現 2-2-2 境界表現

ビジュアル情報処理 2-2-2 境界表現 オイラー操作 v-e+f=2

頂点変換の手順 ( 復習 )

射影変換の種類 ( 復習 ) 3D 図形をそのままの形で 2D ディスプレイに表示することはできない. 3D 図形を 2D 図形に変換射影変換 正射影変換 (orthographic projection) 透視変換 (perspective projection)

正射影変換と透視変換 ( 復習 ) 正射影変換 (orthographic projection) 1. 無限の位置から立体を見た場合に相当する射影変換 2. 視点と図形との相対的な位置関係とは無関係 透視変換 (perspective projection) 1. 視点から図形が離れれば離れるほど小さく変換 2. 見える領域 ( 視体積 ) がピラミッド型

透視変換の計算 ( 復習 ) 視点 V=(0,0,k) x' x = k z + k x x' = z 1 k y y' = z 1 k

透視変換を表す行列 ( 復習 ) 視点 V=(0,0,k) k z y y k z x x k z x k x = = + = 1 ' 1 ' ' = 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 k T

透視変換 :gluperspective() ( 復習 ) コマンド gluperspective() void gluperspective(gldouble fovy, GLdouble aspect, GLdouble near, GLdouble far)

視界変換 :glulookat() ( 復習 ) コマンド glulookat() void glulookat(gldouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz) 注意 : モデルビュー行列 を変更する.

ウインドウサイズの変更 int void ourreshape(int width, int height) { glviewport(0, 0, width, height); glmatrixmode(gl_projection); glloadidentity(); gluperspective(30.0, (GLfloat)width/(GLfloat)height, 10.0, 1000.0);

課題 5 サンプル ( 実行結果 ) ソースコードは授業用ホームページを参照すること

第 5 回課題 #include <stdlib.h> #include <math.h> #include <GL/glut.h> #include <stdio.h> /* 視点と注視点のデータ */ static GLdouble eye[3] = { 45.0, 45.0, 25.0 ;/* 視点の位置 */ static GLdouble center[3] = { 0.0, 0.0, 0.0 ;/* 注視点 */ static GLdouble up[3]; /* ビューアップベクトル */ /* 視点の回転角 */ static int spin_eye = 0; static int globalwidth; static int globalheight; /* 視点の正方向への回転 */ void roteyeplus(void){ spin_eye = ( spin_eye + 15 ) % 360; /*15 加える */ /* 視点の負方向への回転 */ void roteyeminus(void){ spin_eye = ( spin_eye - 15 ) % 360; /*15 差し引く */

第 5 回課題 ( 続き ) static int projection=1; /* 立方体の描画 */ void drawcube() { float vertex[8][3]={{0.,0.,0.,{10.,0.,0.,{10.,10.,0.,{0.,10.,0., {0.,0.,10.,{10.,0.,10.,{10.,10.,10.,{0.,10.,10.; int i; glbegin(gl_line_loop); for(i=0;i<4;++i){ glvertex3fv(vertex[i]); glend(); glbegin(gl_line_loop); for(i=0;i<4;++i){ glvertex3fv(vertex[i+4]); glend(); glbegin(gl_lines); for(i=0;i<4;++i){ glvertex3fv(vertex[i]); glvertex3fv(vertex[i+4]); glend();

第 5 回課題 ( 続き 2) /* 座標軸の描画 */ void drawaxis() { /* x 軸 ( レッド ) */ glcolor3f(1.0f, 0.0f, 0.0f); glbegin(gl_lines); glvertex3f(-100.0f, 0.0f, 0.0f); glvertex3f(100.0f, 0.0f, 0.0f); glend(); /* y 軸 ( グリーン ) */ glcolor3f(0.0f, 1.0f, 0.0f); glbegin(gl_lines); glvertex3f(0.0f, -100.0f, 0.0f); glvertex3f(0.0f, 100.0f, 0.0f); glend(); /* z 軸 ( ブルー ) */ glcolor3f(0.0f, 0.0f, 1.0f); glbegin(gl_lines); glvertex3f(0.0f, 0.0f, -100.0f); glvertex3f(0.0f, 0.0f, 100.0f); glend();

第 5 回課題 ( 続き 3) void ourdisplay(void){ /* バッファのクリア */ glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); /* モデルビュー行列 */ glmatrixmode ( GL_MODELVIEW ); glloadidentity (); /* ビュー行列をセットする */ glulookat(eye[0], eye[1], eye[2], center[0], center[1], center[2], up[0], up[1], up[2]); /* 視点の設定 ( 視点 注視点 方向 )*/ /* 視点の回転移動 */ glrotated ((GLdouble)spin_eye, 0.0, 0.0, 1.0 );/*z 軸正の方向に spin_eye 度回転 */ glcolor3f(1.,1.,1.); gllinewidth(2.); drawcube(); /* drawcube() を呼び出す */ /* x, y, z 軸の描画 */ drawaxis(); glflush();

第 5 回課題 ( 続き 4) void ourinit (void) { glclearcolor(0.0, 0.0, 0.0, 1.0); /* 背景色の指定 */ gldepthfunc ( GL_LESS ); /* デプステストのための比較関数 GL_LESS( より手前のフラグメントを描画 )*/ glenable ( GL_DEPTH_TEST ); /* デプステストを有効にする */ /* * ウインドウが最初にオープンした時やウインドウが移動やリサイズされた時 * 呼ばれる */ void ourreshape(int width, int height) { int i; /* カウンター */ GLdouble vector[3]; /* ビューアップベクトル計算用ベクトル */ GLdouble norm; /* ベクトルのノルム */ globalwidth=width; globalheight=height; glviewport (0, 0, width, height); glmatrixmode (GL_PROJECTION); glloadidentity();

第 5 回課題 ( 続き 5) if(projection==2){ /* 透視変換 */ gluperspective(60.0, (GLfloat) width/(glfloat) height, 0.1, 1000.0); else{ /* 正射影変換 */ glortho(-50.,50.,-50.*(glfloat) height/(glfloat) width,50.*(glfloat) height/(glfloat) width,-100.,1000.); glmatrixmode(gl_modelview); glloadidentity(); /* ビューアップベクトルを計算する */ for ( i=0; i<3; i++ ){ vector[i] = center[i] - eye[i]; up[0] = - vector[0] * vector[2]; up[1] = - vector[1] * vector[2]; up[2] = vector[0] * vector[0] + vector[1] * vector[1]; norm = up[0] * up[0] + up[1] * up[1] + up[2] * up[2]; norm = sqrt ( norm ); for ( i=0; i<3; ++i ) up[i] /= norm;

第 5 回課題 ( 続き 6) void main_menu(int value) /* メインメニュー */ { switch(value){ case 999: exit(1); break; glutpostredisplay(); void Rotate(int value) /* 視点回転 */ { switch(value){ case 1: roteyeplus(); break; case 2: roteyeminus(); break; glutpostredisplay();

第 5 回課題 ( 続き 7) /* メイン */ int main(int argc, char **argv) { int submenu1,submenu2; ( 省略 ) glutreshapefunc(ourreshape); glutdisplayfunc(ourdisplay); submenu1=glutcreatemenu(rotate); /*Rotate eye のサブメニューの作成 */ glutaddmenuentry("positive",1); glutaddmenuentry("negative",2); submenu2=glutcreatemenu(projection); /* Projection のサブメニュー */ glutaddmenuentry("ortho",3); glutaddmenuentry("perspective",4); glutcreatemenu(main_menu); /* メインメニュー */ glutaddsubmenu("rotation mode",submenu1); glutaddsubmenu("projection Mode",submenu2);/* Projection Mode の作成 */ glutaddmenuentry("exit",999); /* Exit の作成 */ glutattachmenu(glut_right_button);/* マウス右クリックでポップアップメニュ */ glutmainloop(); return 0;

課題 5 課題 A 四角錐 ( ピラミッド ) を描画する関数 drawpyramid() を作成し, それを drawcube() の代わりに呼び出せ 課題 B サブメニューを追加して, 立方体とピラミッドの描画を変更できるようにせよ Hint. 1.main 関数に int submenu3; を追加する 2.main 関数に submenu3=glutcreatemenu(geometry); を追加する 3. メニューエントリーを追加する 4.Rotate() や Projection() と同様に, 関数 Geometry() を追加する 5.glutAddSubMenu("Change geometry",submenu3); 課題 C ( 時間に余裕のある人のために ) 立方体やピラミッドに対して, 回転, 平行移動, およびスケーリングを組み合わせて意味のある形状や模様を作成せよ

まとめ ビジュアル情報処理 2 モデリング 2.1 多面体 2.2 ソリッドモデルの形状表現 OpenGL 投影変換 メニューの作成