• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

シェア "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 - > - > - > - >"

Copied!
11
0
0

読み込み中.... (全文を見る)

全文

(1)

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 11 opencv_highgui240d . lib 12 opencv_video240d . lib 13 プ ロ ジ ェ ク ト - > プ ロ パ テ ィ - > 構 成 プ ロ パ テ ィ - > デ バ ッ グ 14 「 環 境 」 に 以 下 を 記 述 ( 実 態 に 合 わ せ て 適 宜 変 更 す る )

15 PATH =C :\ opencv \ build \ x86 \ vc10 \ bin ;C :\ opencv \ build \ common \ tbb \ ia32 \ vc10 ;% PATH % 16 */

17 # include < stdio .h >

18 # include < opencv2 / opencv .hpp > 19

20 int main ( void ) 21 {

22 // カ ラ ー 画 像 を 入 れ る 入 れ 物 i m a g e を 作 る

23 IplImage * image = cvCreateImage ( cvSize (640 ,480) , IPL_DEPTH_8U , 3); 24

25 // p i c t u r e と い う 名 前 の 入 れ 物 に " sample . jpg " と い う 画 像 フ ァ イ ル を 読 み 込 ん で 入 れ る 26 IplImage * picture = cvLoadImage (" sample . jpg " , CV_LOAD_IMAGE_COLOR );

27

28 // p i c t u r e の 中 身 を c I m a g e R e s u l t に 大 き さ を 調 整 し て 入 れ る 29 cvResize ( picture , image , CV_INTER_LINEAR );

30

31 // " My Window " と い う 名 前 の ウ イ ン ド ウ を 作 る 32 cvNamedWindow (" My Window " , CV_WINDOW_AUTOSIZE ); 33

34 cvShowImage (" My Window " , image ); // i m a g e を " My Window " に 表 示 す る 35 36 cvWaitKey (0); // 何 か キ ー が 押 さ れ る ま で 待 つ 37 38 cvDestroyAllWindows (); // 作 っ た ウ イ ン ド ウ を 全 て 閉 じ る 39 40 return 0; 41 }

(2)

2. テクスチャマッピング

Program 2 テクスチャマッピングのプログラムの例 (OpenGL Sample012)

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 11 opencv_highgui240d . lib 12 opencv_video240d . lib 13 プ ロ ジ ェ ク ト - > プ ロ パ テ ィ - > 構 成 プ ロ パ テ ィ - > デ バ ッ グ 14 「 環 境 」 に 以 下 を 記 述 ( 実 態 に 合 わ せ て 適 宜 変 更 す る )

15 PATH =C :\ opencv \ build \ x86 \ vc10 \ bin ;C :\ opencv \ build \ common \ tbb \ ia32 \ vc10 ;% PATH % 16 */

17 # include < stdio .h > 18

19 # include < opencv2 / opencv .hpp > 20 21 # include <GL / glut .h > 22 23 # define SQUARE_TEXTURE 1 24 # define SPHERE_TEXTURE 2 25 26 // グ ロ ー バ ル 変 数

27 static int MouseX = 0; // マ ウ ス X 座 標 28 static int MouseY = 0; // マ ウ ス Y 座 標 29 static float SpinX = 0; // X 軸 周 り の 回 転 量 30 static float SpinY = 0; // Y 軸 周 り の 回 転 量 31 static float Scale = 1.0; // 拡 大 量 32

33 static int MouseLB_ON =0; //左マウスボタン押下フラグ 34 static int MouseRB_ON =0; //右マウスボタン押下フラグ 35

36 void mouse ( int button , int state , int x , int y) 37 {

38 if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN ){

39 MouseLB_ON = 1; printf (" (%3d ,%3 d) で 左 ボ タ ン が 押 さ れ ま し た \ n" , x , y ); 40 } else if ( button == GLUT_LEFT_BUTTON && state == GLUT_UP ){

41 MouseLB_ON = 0; printf (" (%3d ,%3 d) で 左 ボ タ ン を 離 し ま し た \ n" , x , y ); 42 } else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN ){

43 MouseRB_ON = 1; printf (" (%3d ,%3 d) で 右 ボ タ ン が 押 さ れ ま し た \ n" , x , y ); 44 } else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_UP ){

45 MouseRB_ON = 0; printf (" (%3d ,%3 d) で 右 ボ タ ン を 離 し ま し た \ n" , x , y ); 46 }

47 } 48

49 void dragMotion ( int x , int y) 50 { 51 if ( MouseLB_ON == 1){ 52 printf (" (%3d ,%3 d) で 左 ド ラ ッ グ 中 . . . \ n" , x , y ); 53 // マ ウ ス の 移 動 量 か ら 回 転 量 を 作 る 54 SpinX += x - MouseX ; 55 SpinY += y - MouseY ; 56 // マ ウ ス 座 標 の 更 新 57 MouseX = x; 58 MouseY = y; 59 glutPostRedisplay (); 60 } 61 else if ( MouseRB_ON == 1){ 62 printf (" (%3d ,%3 d) で 右 ド ラ ッ グ 中 . . . \ n" , x , y ); 63 // マ ウ ス の 移 動 量 か ら 拡 大 量 を 作 る

64 Scale += ( float )( y - MouseY )/100; 65 // マ ウ ス 座 標 の 更 新 66 MouseX = x; 67 MouseY = y; 68 glutPostRedisplay (); 69 } 70 } 71

72 void reshape ( int w , int h) // ウ イ ン ド ウ サ イ ズ 変 更 時 に 呼 び 出 さ れ る 関 数 ( R e s h a p e コ ー ル バ ッ ク 関 数 ) 73 { 74 glViewport (0 , 0, w , h ); 75 76 glMatrixMode ( GL_PROJECTION ); 77 glLoadIdentity (); 78 gluPerspective (30.0 , ( double )w/h , 1.0 , 100.0); // 透 視 投 影 79 80 glMatrixMode ( GL_MODELVIEW ); 81 glLoadIdentity (); 82 gluLookAt (5.0 , 5.0 , 5.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 , 0.0); // 視 点 の 設 定 83 } 84

(3)

85 void display ( void ) // 描 画 時 に 呼 び 出 さ れ る 関 数 ( D i s p l a y コ ー ル バ ッ ク 関 数 ) 86 {

87 glClearColor (0.0 , 0.0 , 0.0 , 1.0); // 画 面 ク リ ア

88 glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // 画 面 バ ッ フ ァ ク リ ア 89 glEnable ( GL_DEPTH_TEST ); // 隠 面 消 去 を 有 効 90 91 //物体の描画 92 glPushMatrix (); 93 glRotatef ( SpinX , 1.0 , 0.0 , 0.0); // X 軸 周 り に S p i n X だ け 回 転 94 glRotatef ( SpinY , 0.0 , 1.0 , 0.0); // Y 軸 周 り に S p i n Y だ け 回 転 95 glScalef ( Scale , Scale , Scale ); // S c a l e だ け 拡 大 縮 小 96 97 glCallList ( SQUARE_TEXTURE ); //物体 A の 描 画 98 // glCallList ( SPHERE_TEXTURE ); // 物 体 B の 描 画 99 glPopMatrix (); 100 101 // 座 標 軸 の 描 画 102 glPushMatrix (); // X 軸 103 GLfloat mat1diff [] = { 0.6 , 0.2 , 0.2 , 1.0 }; //環境光と拡散光の反射率をまとめて設定 104 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat1diff );

105 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 106 glBegin ( GL_LINES ); 107 glVertex3f (0.0 f , 0.0f , 0.0 f ); 108 glVertex3f (2.0 f , 0.0f , 0.0 f ); 109 glEnd (); 110 glPopMatrix (); 111 glPushMatrix (); // Y 軸 112 GLfloat mat2diff [] = { 0.2 , 0.6 , 0.2 , 1.0 }; //環境光と拡散光の反射率をまとめて設定 113 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat2diff );

114 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 115 glBegin ( GL_LINES ); 116 glVertex3f (0.0 f , 0.0f , 0.0 f ); 117 glVertex3f (0.0 f , 2.0f , 0.0 f ); 118 glEnd (); 119 glPopMatrix (); 120 glPushMatrix (); // Z 軸 121 GLfloat mat3diff [] = { 0.2 , 0.2 , 0.6 , 1.0 }; //環境光と拡散光の反射率をまとめて設定 122 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat3diff );

123 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 124 glBegin ( GL_LINES ); 125 glVertex3f (0.0 f , 0.0f , 0.0 f ); 126 glVertex3f (0.0 f , 0.0f , 2.0 f ); 127 glEnd (); 128 glPopMatrix (); 129 130 glutSwapBuffers (); // 描 画 実 行 131 } 132

133 void lightInit ( void ) // 光 源 の 初 期 設 定 ( ま と め て 関 数 に し て い る だ け ) 134 { 135 glEnable ( GL_LIGHTING ); //光源の設定を有効にする 136 glEnable ( GL_LIGHT0 ); // 0 番 目 の 光 源 を 有 効 に す る ( 8 個 ま で 設 定 可 能 ) 137 glEnable ( GL_NORMALIZE ); //法線ベクトルの自動正規化を有効 138 139 GLfloat light0pos [] = { 0.0 , 5.0 , 0.0 , 1.0 };

140 glLightfv ( GL_LIGHT0 , GL_POSITION , light0pos ); //光源0 の 位 置 を 設 定 141

142 GLfloat light0ambi [] = { 0.2 , 0.2 , 0.2 , 1.0 };

143 glLightfv ( GL_LIGHT0 , GL_AMBIENT , light0ambi ); //光源0 の 環 境 光 の 色 を 設 定 144 GLfloat light0diff [] = { 0.8 , 0.8 , 0.8 , 1.0 };

145 glLightfv ( GL_LIGHT0 , GL_DIFFUSE , light0diff ); //光源0 の 拡 散 光 の 色 を 設 定 146 GLfloat light0spec [] = { 0.5 , 0.5 , 0.5 , 1.0 };

147 glLightfv ( GL_LIGHT0 , GL_SPECULAR , light0spec ); //光源0 の 鏡 面 光 の 色 を 設 定 148

149 glShadeModel ( GL_SMOOTH ); //スムーズシェーディングに設定 150 }

151

152 // 物 体 A( ポ リ ゴ ン に 読 み 込 ん だ 画 像 を テ ク ス チ ャ と し て 貼 る ) の 作 成 153 void makeModelA ( unsigned char * image , int size_x , int size_y ) 154 {

155 GLfloat white [] = { 1.0 , 1.0 , 1.0 , 1.0 }; // 材 質 は 白 156

157 GLuint texture ;

158 glGenTextures (1 , & texture ); // テ ク ス チ ャ の 数 を 知 ら せ る 159 glBindTexture ( GL_TEXTURE_2D , texture ); // バ イ ン ド ( 設 定 ) す る 160

161 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR ); //拡大についての設定( 線 形 補 間 ) 162 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR ); //縮小についての設定( 線 形 補 間 ) 163 //ミップマップ処理の設定

164 gluBuild2DMipmaps ( GL_TEXTURE_2D , 3, size_x , size_y , GL_RGB , GL_UNSIGNED_BYTE , image ); 165

166 /* モ デ ル 作 成 ( デ ィ ス プ レ イ リ ス ト ) */ 167 glNewList ( SQUARE_TEXTURE , GL_COMPILE ); 168 glPushMatrix ();

169 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , white ); 170 glEnable ( GL_TEXTURE_2D );

171 glBegin ( GL_POLYGON );

(4)

173 glTexCoord2f (0.0 , 1.0); glVertex3f ( 1.0 , 0.0 , 1.0); 174 glTexCoord2f (0.0 , 0.0); glVertex3f ( -1.0 , 0.0 , 1.0); 175 glTexCoord2f (1.0 , 0.0); glVertex3f ( -1.0 , 0.0 , -1.0); 176 glTexCoord2f (1.0 , 1.0); glVertex3f ( 1.0 , 0.0 , -1.0); 177 glEnd (); 178 glDisable ( GL_TEXTURE_2D ); 179 glPopMatrix (); 180 glEndList (); 181 182 return ; 183 } 184 185 // 物 体 B ( 球 に 読 み 込 ん だ 画 像 を テ ク ス チ ャ と し て 貼 る ) の 作 成 186 void makeModelB ( unsigned char * image , int size_x , int size_y ) 187 {

188 GLfloat white [] = { 1.0 , 1.0 , 1.0 , 1.0 }; // 材 質 は 白 189

190 GLuint texture ;

191 glGenTextures (1 , & texture ); // テ ク ス チ ャ の 数 を 知 ら せ る 192 glBindTexture ( GL_TEXTURE_2D , texture ); // バ イ ン ド ( 設 定 ) す る 193

194 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR ); //拡大についての設定( 線 形 補 間 ) 195 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR ); //縮小についての設定( 線 形 補 間 ) 196 //ミップマップ処理の設定

197 gluBuild2DMipmaps ( GL_TEXTURE_2D , 3, size_x , size_y , GL_RGB , GL_UNSIGNED_BYTE , image ); 198

199 GLUquadricObj * sphere ; 200 sphere = gluNewQuadric ();

201 gluQuadricDrawStyle ( sphere , GLU_FILL ); 202 gluQuadricNormals ( sphere , GLU_SMOOTH ); 203 gluQuadricTexture ( sphere , GL_TRUE ); 204

205 /* モ デ ル 作 成 ( デ ィ ス プ レ イ リ ス ト ) */ 206 glNewList ( SPHERE_TEXTURE , GL_COMPILE ); 207 glPushMatrix ();

208 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , white ); 209 glEnable ( GL_TEXTURE_2D ); 210 gluSphere ( sphere , 1.0 , 32 , 32); 211 glDisable ( GL_TEXTURE_2D ); 212 glPopMatrix (); 213 glEndList (); 214 215 return ; 216 } 217

218 int main ( int argc , char * argv []) 219 {

220 // OpenCV Initialize

221 // テ ク ス チ ャ 画 像 の 読 み 込 み と 配 列 へ の 格 納

222 IplImage * texImage = cvLoadImage (" texture . bmp " ,1); 223 unsigned char image [128][128][3];

224 for ( int x =0;x <128; x ++){ 225 for ( int y =0;y <128; y ++){

226 image [x ][ y ][2]= texImage -> imageData [128* y *3+ x *3+0];/* B */ 227 image [x ][ y ][1]= texImage -> imageData [128* y *3+ x *3+1];/* G */ 228 image [x ][ y ][0]= texImage -> imageData [128* y *3+ x *3+2];/* R */ 229 } }

230

231 // ウ イ ン ド ウ を 開 く

232 cvNamedWindow (" OpenCV Window " , CV_WINDOW_AUTOSIZE ); 233 cvShowImage (" OpenCV Window " , texImage );

234 cvWaitKey (1); 235

236 // OpenGL Initialize

237 glutInit (& argc , argv ); // G L U T 初 期 化

238 glutInitDisplayMode ( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH ); 239 glutInitWindowSize (640 , 480); // ウ ィ ン ド ウ サ イ ズ の 指 定 240 glutCreateWindow (" window " ); // 表 示 ウ ィ ン ド ウ 作 成 241 glutReshapeFunc ( reshape ); // R e s h a p e コ ー ル バ ッ ク 関 数 の 指 定 242 glutDisplayFunc ( display ); // D i s p l a y コ ー ル バ ッ ク 関 数 の 指 定 243 244 glutMouseFunc ( mouse ); // マ ウ ス ク リ ッ ク コ ー ル バ ッ ク 関 数 の 指 定 245 glutMotionFunc ( dragMotion ); // マ ウ ス ド ラ ッ グ コ ー ル バ ッ ク 関 数 の 指 定 246 247 lightInit (); // 光 源 の 初 期 設 定 ( ま と め て 関 数 に し て い る だ け ) 248

249 makeModelA (( unsigned char *) image , 128 , 128); // C G モ デ ル の 作 成 と デ ィ ス プ レ イ リ ス ト 化 250 makeModelB (( unsigned char *) image , 128 , 128); // C G モ デ ル の 作 成 と デ ィ ス プ レ イ リ ス ト 化 251

252 // メ イ ン ル ー プ ( g l u t の 機 能 に よ り m y I d l e が 繰 り 返 し 呼 ば れ る ) 253 glutMainLoop (); // メ イ ン ル ー プ へ

254

255 // OpenCV Finalize

256 cvDestroyWindow ( " OpenCV Window " ); 257

258 return 0; 259 }

(5)

Program 3 複数テクスチャのマッピングプログラムの例 (OpenGL Sample013)

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 11 opencv_highgui240d . lib 12 opencv_video240d . lib 13 プ ロ ジ ェ ク ト - > プ ロ パ テ ィ - > 構 成 プ ロ パ テ ィ - > デ バ ッ グ 14 「 環 境 」 に 以 下 を 記 述 ( 実 態 に 合 わ せ て 適 宜 変 更 す る )

15 PATH =C :\ opencv \ build \ x86 \ vc10 \ bin ;C :\ opencv \ build \ common \ tbb \ ia32 \ vc10 ;% PATH % 16 */

17 # include < stdio .h > 18

19 # include < opencv2 / opencv .hpp > 20 21 # include <GL / glut .h > 22 23 // テ ク ス チ ャ ID 24 # define TEXTURE_STARS 101 25 # define TEXTURE_EARTH 102 26 27 // モ デ ル の デ ィ ス プ レ イ リ ス ト ID 28 # define SQUARE_TEXTURE 1 29 # define SPHERE_TEXTURE 2 30 31 // グ ロ ー バ ル 変 数

32 static int MouseX = 0; // マ ウ ス X 座 標 33 static int MouseY = 0; // マ ウ ス Y 座 標 34 static float SpinX = 0; // X 軸 周 り の 回 転 量 35 static float SpinY = 0; // Y 軸 周 り の 回 転 量 36 static float Scale = 1.0; // 拡 大 量 37

38 static int MouseLB_ON =0; //左マウスボタン押下フラグ 39 static int MouseRB_ON =0; //右マウスボタン押下フラグ 40

41 void mouse ( int button , int state , int x , int y) 42 {

43 if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN ){

44 MouseLB_ON = 1; printf (" (%3d ,%3 d) で 左 ボ タ ン が 押 さ れ ま し た \ n" , x , y ); 45 } else if ( button == GLUT_LEFT_BUTTON && state == GLUT_UP ){

46 MouseLB_ON = 0; printf (" (%3d ,%3 d) で 左 ボ タ ン を 離 し ま し た \ n" , x , y ); 47 } else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN ){

48 MouseRB_ON = 1; printf (" (%3d ,%3 d) で 右 ボ タ ン が 押 さ れ ま し た \ n" , x , y ); 49 } else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_UP ){

50 MouseRB_ON = 0; printf (" (%3d ,%3 d) で 右 ボ タ ン を 離 し ま し た \ n" , x , y ); 51 }

52 } 53

54 void dragMotion ( int x , int y) 55 { 56 if ( MouseLB_ON == 1){ 57 printf (" (%3d ,%3 d) で 左 ド ラ ッ グ 中 . . . \ n" , x , y ); 58 // マ ウ ス の 移 動 量 か ら 回 転 量 を 作 る 59 SpinX += x - MouseX ; 60 SpinY += y - MouseY ; 61 // マ ウ ス 座 標 の 更 新 62 MouseX = x; 63 MouseY = y; 64 glutPostRedisplay (); 65 } 66 else if ( MouseRB_ON == 1){ 67 printf (" (%3d ,%3 d) で 右 ド ラ ッ グ 中 . . . \ n" , x , y ); 68 // マ ウ ス の 移 動 量 か ら 拡 大 量 を 作 る

69 Scale += ( float )( y - MouseY )/100; 70 // マ ウ ス 座 標 の 更 新 71 MouseX = x; 72 MouseY = y; 73 glutPostRedisplay (); 74 } 75 } 76

77 void reshape ( int w , int h) // ウ イ ン ド ウ サ イ ズ 変 更 時 に 呼 び 出 さ れ る 関 数 ( R e s h a p e コ ー ル バ ッ ク 関 数 ) 78 { 79 glViewport (0 , 0, w , h ); 80 glMatrixMode ( GL_PROJECTION ); 81 glLoadIdentity (); 82 gluPerspective (30.0 , ( double )w/h , 1.0 , 100.0); // 透 視 投 影 83 84 glMatrixMode ( GL_MODELVIEW ); 85 glLoadIdentity (); 86 gluLookAt (5.0 , 0.0 , 5.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 , 0.0); // 視 点 の 設 定 87 }

(6)

88

89 void display ( void ) // 描 画 時 に 呼 び 出 さ れ る 関 数 ( D i s p l a y コ ー ル バ ッ ク 関 数 ) 90 {

91 glClearColor (0.0 , 0.0 , 0.0 , 1.0); // 画 面 ク リ ア

92 glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // 画 面 バ ッ フ ァ ク リ ア 93 glEnable ( GL_DEPTH_TEST ); // 隠 面 消 去 を 有 効 94 95 //物体の描画 96 glPushMatrix (); 97 glTranslatef ( -1.0 ,0.0 , -1.0); 98 glRotatef (45.0 , 0.0 , 1.0 , 0.0); // Y 軸 周 り に S p i n Y だ け 回 転 99 glScalef (3.0 , 3.0 , 3.0); // S c a l e だ け 拡 大 縮 小

100 glBindTexture ( GL_TEXTURE_2D , TEXTURE_STARS ); // バ イ ン ド ( 設 定 ) す る 101 glCallList ( SQUARE_TEXTURE ); //物体 A の 描 画 102 glPopMatrix (); 103 104 //物体の描画 105 glPushMatrix (); 106 glRotatef ( SpinX , 1.0 , 0.0 , 0.0); // X 軸 周 り に S p i n X だ け 回 転 107 glRotatef ( SpinY , 0.0 , 1.0 , 0.0); // Y 軸 周 り に S p i n Y だ け 回 転 108 glScalef ( Scale , Scale , Scale ); // S c a l e だ け 拡 大 縮 小

109 glBindTexture ( GL_TEXTURE_2D , TEXTURE_EARTH ); // バ イ ン ド ( 設 定 ) す る 110 glCallList ( SPHERE_TEXTURE ); //物体 B の 描 画 111 glPopMatrix (); 112 113 // 座 標 軸 の 描 画 114 glPushMatrix (); // X 軸 115 GLfloat mat1diff [] = { 0.6 , 0.2 , 0.2 , 1.0 }; //環境光と拡散光の反射率をまとめて設定 116 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat1diff );

117 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 118 glBegin ( GL_LINES ); 119 glVertex3f (0.0 f , 0.0f , 0.0 f ); 120 glVertex3f (2.0 f , 0.0f , 0.0 f ); 121 glEnd (); 122 glPopMatrix (); 123 glPushMatrix (); // Y 軸 124 GLfloat mat2diff [] = { 0.2 , 0.6 , 0.2 , 1.0 }; //環境光と拡散光の反射率をまとめて設定 125 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat2diff );

126 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 127 glBegin ( GL_LINES ); 128 glVertex3f (0.0 f , 0.0f , 0.0 f ); 129 glVertex3f (0.0 f , 2.0f , 0.0 f ); 130 glEnd (); 131 glPopMatrix (); 132 glPushMatrix (); // Z 軸 133 GLfloat mat3diff [] = { 0.2 , 0.2 , 0.6 , 1.0 }; //環境光と拡散光の反射率をまとめて設定 134 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat3diff );

135 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 136 glBegin ( GL_LINES ); 137 glVertex3f (0.0 f , 0.0f , 0.0 f ); 138 glVertex3f (0.0 f , 0.0f , 2.0 f ); 139 glEnd (); 140 glPopMatrix (); 141 142 glutSwapBuffers (); // 描 画 実 行 143 } 144

145 void lightInit ( void ) // 光 源 の 初 期 設 定 ( ま と め て 関 数 に し て い る だ け ) 146 { 147 glEnable ( GL_LIGHTING ); //光源の設定を有効にする 148 glEnable ( GL_LIGHT0 ); // 0 番 目 の 光 源 を 有 効 に す る ( 8 個 ま で 設 定 可 能 ) 149 glEnable ( GL_NORMALIZE ); //法線ベクトルの自動正規化を有効 150 151 GLfloat light0pos [] = { 0.0 , 5.0 , 0.0 , 1.0 };

152 glLightfv ( GL_LIGHT0 , GL_POSITION , light0pos ); //光源0 の 位 置 を 設 定 153

154 GLfloat light0ambi [] = { 0.2 , 0.2 , 0.2 , 1.0 };

155 glLightfv ( GL_LIGHT0 , GL_AMBIENT , light0ambi ); //光源0 の 環 境 光 の 色 を 設 定 156 GLfloat light0diff [] = { 0.8 , 0.8 , 0.8 , 1.0 };

157 glLightfv ( GL_LIGHT0 , GL_DIFFUSE , light0diff ); //光源0 の 拡 散 光 の 色 を 設 定 158 GLfloat light0spec [] = { 0.5 , 0.5 , 0.5 , 1.0 };

159 glLightfv ( GL_LIGHT0 , GL_SPECULAR , light0spec ); //光源0 の 鏡 面 光 の 色 を 設 定 160

161 glShadeModel ( GL_SMOOTH ); //スムーズシェーディングに設定 162 }

163

164 void loadTexture ( void ) 165 {

166 // O p e n C V を 使 っ て 画 像 フ ァ イ ル を 読 み 込 む 167 // 1 つ 目 の テ ク ス チ ャ 画 像 の 読 み 込 み

168 IplImage * _texImage1 = cvLoadImage (" texture1 . jpg " , 1); 169 // テ ク ス チ ャ 画 像 ( ( 2 の n 乗 )*( 2 の n 乗 ) の サ イ ズ に す る と 無 難 )

170 IplImage * texImage1 = cvCreateImage ( cvSize (768 ,512) , IPL_DEPTH_8U ,3); 171 cvResize ( _texImage1 , texImage1 );

172 cvFlip ( texImage1 , texImage1 , 0);//画像の上下反転

173 cvCvtColor ( texImage1 , texImage1 , CV_BGR2RGB ); //画素データ順序を B G R か ら R G B に 変 換 174 cvNamedWindow (" OpenCV Window 1" , CV_WINDOW_AUTOSIZE );

(7)

176 // 1 つ 目 の テ ク ス チ ャ の 設 定

177 glBindTexture ( GL_TEXTURE_2D , TEXTURE_STARS ); // こ れ か ら 1 つ 目 の テ ク ス チ ャ の 設 定 を す る 178 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR ); //拡大についての設定( 線 形 補 間 ) 179 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR ); //縮小についての設定( 線 形 補 間 ) 180 //ミップマップ処理の設定

181 gluBuild2DMipmaps ( GL_TEXTURE_2D , 3, 768 , 512 , GL_RGB , GL_UNSIGNED_BYTE , texImage1 -> imageData ); 182 // 画 像 メ モ リ の 解 放

183 cvReleaseImage (& texImage1 ); 184

185 // 2 つ 目 の テ ク ス チ ャ 画 像 の 読 み 込 み

186 IplImage * _texImage2 = cvLoadImage (" texture2 . jpg " , 1); 187 // テ ク ス チ ャ 画 像 ( ( 2 の n 乗 )*( 2 の n 乗 ) の サ イ ズ に す る と 無 難 )

188 IplImage * texImage2 = cvCreateImage ( cvSize (1024 ,512) , IPL_DEPTH_8U ,3); 189 cvResize ( _texImage2 , texImage2 );

190 cvFlip ( texImage2 , texImage2 , 0); //画像の上下反転

191 cvCvtColor ( texImage2 , texImage2 , CV_BGR2RGB ); //画素データ順序を B G R か ら R G B に 変 換 192 cvNamedWindow (" OpenCV Window 2" , CV_WINDOW_AUTOSIZE );

193 cvShowImage (" OpenCV Window 2" , _texImage2 ); cvWaitKey (1); 194 // 2 つ 目 の テ ク ス チ ャ の 設 定

195 glBindTexture ( GL_TEXTURE_2D , TEXTURE_EARTH ); // こ れ か ら 1 つ 目 の テ ク ス チ ャ の 設 定 を す る 196 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR ); //拡大についての設定( 線 形 補 間 ) 197 glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR ); //縮小についての設定( 線 形 補 間 ) 198 //ミップマップ処理の設定

199 gluBuild2DMipmaps ( GL_TEXTURE_2D , 3, 1024 , 512 , GL_RGB , GL_UNSIGNED_BYTE , texImage2 -> imageData ); 200 // 画 像 メ モ リ の 解 放

201 cvReleaseImage (& texImage2 ); 202

203 return ; 204 }

205

206 // 物 体 A( ポ リ ゴ ン に 読 み 込 ん だ 画 像 を テ ク ス チ ャ と し て 貼 る ) の 作 成 207 void makeModelA ( void )

208 {

209 GLfloat white [] = { 1.0 , 1.0 , 1.0 , 1.0 }; // 材 質 は 白 210

211 /* モ デ ル 作 成 ( デ ィ ス プ レ イ リ ス ト ) */ 212 glNewList ( SQUARE_TEXTURE , GL_COMPILE ); 213 glPushMatrix ();

214 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , white ); 215 glEnable ( GL_TEXTURE_2D ); 216 glBegin ( GL_POLYGON ); 217 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 218 glTexCoord2f (1.0 , 1.0); glVertex3f ( 1.0 , 1.0 , 0.0); 219 glTexCoord2f (0.0 , 1.0); glVertex3f ( -1.0 , 1.0 , 0.0); 220 glTexCoord2f (0.0 , 0.0); glVertex3f ( -1.0 , -1.0 ,0.0); 221 glTexCoord2f (1.0 , 0.0); glVertex3f ( 1.0 , -1.0 ,0.0); 222 glEnd (); 223 glDisable ( GL_TEXTURE_2D ); 224 glPopMatrix (); 225 glEndList (); 226 227 return ; 228 } 229 230 // 物 体 B ( 球 に 読 み 込 ん だ 画 像 を テ ク ス チ ャ と し て 貼 る ) の 作 成 231 void makeModelB ( void )

232 {

233 GLfloat white [] = { 1.0 , 1.0 , 1.0 , 1.0 }; // 材 質 は 白 234

235 GLUquadricObj * sphere ; 236 sphere = gluNewQuadric ();

237 gluQuadricDrawStyle ( sphere , GLU_FILL ); 238 gluQuadricNormals ( sphere , GLU_SMOOTH ); 239 gluQuadricTexture ( sphere , GL_TRUE ); 240

241 /* モ デ ル 作 成 ( デ ィ ス プ レ イ リ ス ト ) */ 242 glNewList ( SPHERE_TEXTURE , GL_COMPILE ); 243 glPushMatrix ();

244 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , white ); 245 glEnable ( GL_TEXTURE_2D ); 246 gluSphere ( sphere , 1.0 , 32 , 32); 247 glDisable ( GL_TEXTURE_2D ); 248 glPopMatrix (); 249 glEndList (); 250 251 return ; 252 } 253

254 int main ( int argc , char * argv []) 255 {

256

257 // ************************************************************* 258 // OpenGL Initialize

259 // ************************************************************* 260 glutInit (& argc , argv ); // G L U T 初 期 化

261 glutInitDisplayMode ( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH ); 262 glutInitWindowSize (640 , 480); // ウ ィ ン ド ウ サ イ ズ の 指 定 263 glutCreateWindow (" window " ); // 表 示 ウ ィ ン ド ウ 作 成

(8)

264 glutReshapeFunc ( reshape ); // R e s h a p e コ ー ル バ ッ ク 関 数 の 指 定 265 glutDisplayFunc ( display ); // D i s p l a y コ ー ル バ ッ ク 関 数 の 指 定 266 267 glutMouseFunc ( mouse ); // マ ウ ス ク リ ッ ク コ ー ル バ ッ ク 関 数 の 指 定 268 glutMotionFunc ( dragMotion ); // マ ウ ス ド ラ ッ グ コ ー ル バ ッ ク 関 数 の 指 定 269 270 lightInit (); // 光 源 の 初 期 設 定 ( ま と め て 関 数 に し て い る だ け ) 271 272 loadTexture (); // テ ク ス チ ャ の 読 み 込 み 273 makeModelA (); // C G モ デ ル の 作 成 と デ ィ ス プ レ イ リ ス ト 化 274 makeModelB (); // C G モ デ ル の 作 成 と デ ィ ス プ レ イ リ ス ト 化 275 276 // ************************************************************* 277 // メ イ ン ル ー プ ( g l u t の 機 能 に よ り m y I d l e が 繰 り 返 し 呼 ば れ る ) 278 // ************************************************************* 279 glutMainLoop (); // メ イ ン ル ー プ へ 280 // ---281 282 // ************************************************************* 283 // OpenCV Finalize 284 // ************************************************************* 285 cvDestroyAllWindows (); 286 287 return 0; 288 }

(9)

3. 物体の発光や透過

Program 4 物体の発光や透過の例 (OpenGL Sample014)

1 # include < stdio .h > 2 # include <GL / glut .h > 3

4 // グ ロ ー バ ル 変 数

5 static int MouseX = 0; // マ ウ ス X 座 標 6 static int MouseY = 0; // マ ウ ス Y 座 標 7 static float SpinX = 0; // X 軸 周 り の 回 転 量 8 static float SpinY = 0; // Y 軸 周 り の 回 転 量 9 static float MoveX = 0; // X 軸 方 向 の 移 動 量 10 static float MoveZ = 0; // Y 軸 方 向 の 移 動 量 11 static float Scale = 1.0; // 拡 大 量 12

13 void specialKey ( int key , int x , int y) 14 { 15 switch ( key ) { 16 case GLUT_KEY_UP : 17 printf (" (%3d ,%3 d) で [ ↑ ] が 押 さ れ ま し た \ n" , x , y ); 18 MoveZ += 0.1; 19 break ; 20 case GLUT_KEY_DOWN : 21 printf (" (%3d ,%3 d) で [ ↓ ] が 押 さ れ ま し た \ n" , x , y ); 22 MoveZ -= 0.1; 23 break ; 24 case GLUT_KEY_LEFT : 25 printf (" (%3d ,%3 d) で [ ← ] が 押 さ れ ま し た \ n" , x , y ); 26 MoveX -= 0.1; 27 break ; 28 case GLUT_KEY_RIGHT : 29 printf (" (%3d ,%3 d) で [ → ] が 押 さ れ ま し た \ n" , x , y ); 30 MoveX += 0.1; 31 break ; 32 } 33 glutPostRedisplay (); 34 } 35

36 static int MouseLB_ON =0; //左マウスボタン押下フラグ 37 static int MouseRB_ON =0; //右マウスボタン押下フラグ 38

39 void mouse ( int button , int state , int x , int y) 40 {

41 if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN ){

42 MouseLB_ON = 1; printf (" (%3d ,%3 d) で 左 ボ タ ン が 押 さ れ ま し た \ n" , x , y ); 43 } else if ( button == GLUT_LEFT_BUTTON && state == GLUT_UP ){

44 MouseLB_ON = 0; printf (" (%3d ,%3 d) で 左 ボ タ ン を 離 し ま し た \ n" , x , y ); 45 } else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN ){

46 MouseRB_ON = 1; printf (" (%3d ,%3 d) で 右 ボ タ ン が 押 さ れ ま し た \ n" , x , y ); 47 } else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_UP ){

48 MouseRB_ON = 0; printf (" (%3d ,%3 d) で 右 ボ タ ン を 離 し ま し た \ n" , x , y ); 49 }

50 } 51

52 void dragMotion ( int x , int y) 53 { 54 if ( MouseLB_ON == 1){ 55 printf (" (%3d ,%3 d) で 左 ド ラ ッ グ 中 . . . \ n" , x , y ); 56 // マ ウ ス の 移 動 量 か ら 回 転 量 を 作 る 57 SpinX += x - MouseX ; 58 SpinY += y - MouseY ; 59 // マ ウ ス 座 標 の 更 新 60 MouseX = x; 61 MouseY = y; 62 glutPostRedisplay (); 63 } 64 else if ( MouseRB_ON == 1){ 65 printf (" (%3d ,%3 d) で 右 ド ラ ッ グ 中 . . . \ n" , x , y ); 66 // マ ウ ス の 移 動 量 か ら 拡 大 量 を 作 る

67 Scale += ( float )( y - MouseY )/100; 68 // マ ウ ス 座 標 の 更 新 69 MouseX = x; 70 MouseY = y; 71 glutPostRedisplay (); 72 } 73 } 74

75 void reshape ( int w , int h) // ウ イ ン ド ウ サ イ ズ 変 更 時 に 呼 び 出 さ れ る 関 数 ( R e s h a p e コ ー ル バ ッ ク 関 数 ) 76 { 77 glViewport (0 , 0, w , h ); 78 79 glMatrixMode ( GL_PROJECTION ); 80 glLoadIdentity (); 81 gluPerspective (30.0 , ( double )w/h , 1.0 , 100.0); // 透 視 投 影 82 83 glMatrixMode ( GL_MODELVIEW ); 84 glLoadIdentity ();

(10)

85 gluLookAt (5.0 , 5.0 , 5.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 , 0.0); // 視 点 の 設 定 86 }

87

88 void display ( void ) // 描 画 時 に 呼 び 出 さ れ る 関 数 ( D i s p l a y コ ー ル バ ッ ク 関 数 ) 89 {

90 glClearColor (0.0 , 0.0 , 0.0 , 1.0); // 画 面 ク リ ア

91 glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // 画 面 バ ッ フ ァ ク リ ア 92 glEnable ( GL_DEPTH_TEST ); // 隠 面 消 去 を 有 効 93 94 //発光球( シ ル バ ー ) の 描 画 95 glPushMatrix (); 96 GLfloat silver_ambient [] = {0.19225 , 0.19225 , 0.19225 , 1.0}; 97 GLfloat silver_diffuse [] = {0.50754 , 0.50754 , 0.50754 , 1.0}; 98 GLfloat silver_specular [] = {0.508273 , 0.508273 , 0.508273 ,1.0}; 99 GLfloat silver_shininess []= {51.2};

100 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT , silver_ambient ); 101 glMaterialfv ( GL_FRONT_AND_BACK , GL_DIFFUSE , silver_diffuse ); 102 glMaterialfv ( GL_FRONT_AND_BACK , GL_SPECULAR , silver_specular ); 103 glMaterialfv ( GL_FRONT_AND_BACK , GL_SHININESS , silver_shininess );

104 glMaterialfv ( GL_FRONT_AND_BACK , GL_EMISSION , silver_diffuse );// オ ブ ジ ェ ク ト を 発 光 さ せ る 105 glTranslatef (0.0 , 2.0 , 0.0); // Y 軸 方 向 に 2 .0 移 動

106 glutSolidSphere (0.2 , 20.0 , 20.0); //球の描画

107 GLfloat silver_emission_nomal [] = {0.0 , 0.0 , 0.0 , 1.0};

108 glMaterialfv ( GL_FRONT_AND_BACK , GL_EMISSION , silver_emission_nomal ); // 発 光 を も と に 戻 す 109 glPopMatrix ();

110

111 // 座 標 軸 の 描 画 112 glPushMatrix (); // X 軸

113 GLfloat mat1diff [] = { 0.6 , 0.2 , 0.2 , 1.0 };

114 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat1diff ); 115 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 116 glBegin ( GL_LINES ); 117 glVertex3f (0.0 f , 0.0f , 0.0 f ); 118 glVertex3f (2.0 f , 0.0f , 0.0 f ); 119 glEnd (); 120 glPopMatrix (); 121 glPushMatrix (); // Y 軸 122 GLfloat mat2diff [] = { 0.2 , 0.6 , 0.2 , 1.0 };

123 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat2diff ); 124 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 125 glBegin ( GL_LINES ); 126 glVertex3f (0.0 f , 0.0f , 0.0 f ); 127 glVertex3f (0.0 f , 2.0f , 0.0 f ); 128 glEnd (); 129 glPopMatrix (); 130 glPushMatrix (); // Z 軸 131 GLfloat mat3diff [] = { 0.2 , 0.2 , 0.6 , 1.0 };

132 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT_AND_DIFFUSE , mat3diff ); 133 glNormal3f (0.0 , 1.0 , 0.0); //法線方向の設定 134 glBegin ( GL_LINES ); 135 glVertex3f (0.0 f , 0.0f , 0.0 f ); 136 glVertex3f (0.0 f , 0.0f , 2.0 f ); 137 glEnd (); 138 glPopMatrix (); 139 140 // ブ レ ン デ ィ イ ン グ を 有 効 に す る 141 glEnable ( GL_BLEND ); 142 // ア ル フ ァ ブ レ ン デ ィ イ ン グ の 設 定 ( 色 々 な 透 明 感 の 出 し 方 が あ る が 通 常 は こ れ で 良 い ) 143 glBlendFunc ( GL_SRC_ALPHA , GL_ONE );

144 145 //緑( プ ラ ス チ ッ ク ) の 球 の 描 画 146 glPushMatrix (); 147 GLfloat green_plastic_ambient [] = {0.0 , 0.0 , 0.0 , 1.0}; 148 GLfloat green_plastic_diffuse [] = {0.1 , 0.35 , 0.1 , 1.0}; 149 GLfloat green_plastic_specular [] = {0.45 , 0.55 , 0.45 , 1.0}; 150 GLfloat green_plastic_shininess []= {32};

151 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT , green_plastic_ambient ); 152 glMaterialfv ( GL_FRONT_AND_BACK , GL_DIFFUSE , green_plastic_diffuse ); 153 glMaterialfv ( GL_FRONT_AND_BACK , GL_SPECULAR , green_plastic_specular ); 154 glMaterialfv ( GL_FRONT_AND_BACK , GL_SHININESS , green_plastic_shininess ); 155 glTranslatef (0.0 , 0.0 , 1.0); // Z 軸 方 向 に 1 .0 移 動 156 glutSolidSphere (0.5 , 20.0 , 20.0); //球の描画 157 glPopMatrix (); 158 159 //赤( ル ビ ー ) の 球 の 描 画 160 glPushMatrix (); 161 GLfloat ruby_ambient [] = {0.1745 , 0.01175 , 0.01175 , 1.0}; 162 GLfloat ruby_diffuse [] = {0.61424 , 0.04136 , 0.04136 , 1.0}; 163 GLfloat ruby_specular [] = {0.727811 , 0.626959 , 0.626959 , 1.0}; 164 GLfloat ruby_shininess []= {76.8 };

165 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT , ruby_ambient ); 166 glMaterialfv ( GL_FRONT_AND_BACK , GL_DIFFUSE , ruby_diffuse ); 167 glMaterialfv ( GL_FRONT_AND_BACK , GL_SPECULAR , ruby_specular ); 168 glMaterialfv ( GL_FRONT_AND_BACK , GL_SHININESS , ruby_shininess ); 169 glTranslatef (1.0 , 0.0 , 0.0); // X 軸 方 向 に 1 .0 移 動

170 glutSolidSphere (0.5 , 20.0 , 20.0); //球の描画 171 glPopMatrix ();

(11)

173 //半透明の立方体( 真 鍮 ) を 描 画 174 glPushMatrix (); 175 GLfloat brass_ambient [] ={0.329412 , 0.223529 , 0.027451 , 0.5};//アルファ値(0.5) が 透 明 度 を 示 す 176 GLfloat brass_diffuse [] ={0.780392 , 0.568627 , 0.113725 , 0.5};//アルファ値(0.5) が 透 明 度 を 示 す 177 GLfloat brass_specular [] ={0.992157 , 0.941176 , 0.807843 , 0.5};//アルファ値(0.5) が 透 明 度 を 示 す 178 GLfloat brass_shininess []={27.89743616};

179 glMaterialfv ( GL_FRONT_AND_BACK , GL_AMBIENT , brass_ambient ); 180 glMaterialfv ( GL_FRONT_AND_BACK , GL_DIFFUSE , brass_diffuse ); 181 glMaterialfv ( GL_FRONT_AND_BACK , GL_SPECULAR , brass_specular ); 182 glMaterialfv ( GL_FRONT_AND_BACK , GL_SHININESS , brass_shininess );

183 glTranslatef ( MoveX , 0.0 , MoveZ ); // X 軸 方 向 に M o v e X , Z 軸 方 向 に M o v e Z だ け 移 動 184 glRotatef ( SpinX , 1.0 , 0.0 , 0.0); // X 軸 周 り に S p i n X だ け 回 転

185 glRotatef ( SpinY , 0.0 , 1.0 , 0.0); // Y 軸 周 り に S p i n Y だ け 回 転 186 glScalef ( Scale , Scale , Scale ); // S c a l e だ け 拡 大 縮 小 187 //半透明の立方体を描画 188 glutSolidCube (2.0); 189 glPopMatrix (); 190 191 glDisable ( GL_BLEND ); // ブ レ ン ド を 無 効 に す る 192 193 glutSwapBuffers (); // 描 画 実 行 194 } 195

196 void lightInit ( void ) // 光 源 の 初 期 設 定 ( ま と め て 関 数 に し て い る だ け ) 197 { 198 glEnable ( GL_LIGHTING ); //光源の設定を有効にする 199 glEnable ( GL_LIGHT0 ); // 0 番 目 の 光 源 を 有 効 に す る ( 8 個 ま で 設 定 可 能 ) 200 glEnable ( GL_NORMALIZE ); //法線ベクトルの自動正規化を有効 201 202 GLfloat light0pos [] = { 0.0 , 2.0 , 0.0 , 1.0 };// Y 軸 方 向 に 2 .0 移 動 ( 発 光 球 と 同 じ 場 所 に ) 203 glLightfv ( GL_LIGHT0 , GL_POSITION , light0pos ); //光源0 の 位 置 を 設 定

204

205 GLfloat light0ambi [] = { 0.2 , 0.2 , 0.2 , 1.0 };

206 glLightfv ( GL_LIGHT0 , GL_AMBIENT , light0ambi ); //光源0 の 環 境 光 の 色 を 設 定 207 GLfloat light0diff [] = { 0.8 , 0.8 , 0.8 , 1.0 };

208 glLightfv ( GL_LIGHT0 , GL_DIFFUSE , light0diff ); //光源0 の 拡 散 光 の 色 を 設 定 209 GLfloat light0spec [] = { 0.5 , 0.5 , 0.5 , 1.0 };

210 glLightfv ( GL_LIGHT0 , GL_SPECULAR , light0spec ); //光源0 の 鏡 面 光 の 色 を 設 定 211

212 glShadeModel ( GL_SMOOTH ); //スムーズシェーディングに設定 213 }

214

215 int main ( int argc , char * argv []) 216 {

217 glutInit (& argc , argv ); // G L U T 初 期 化

218 glutInitDisplayMode ( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH ); 219 glutInitWindowSize (640 , 480); // ウ ィ ン ド ウ サ イ ズ の 指 定 220 glutCreateWindow (" window " ); // 表 示 ウ ィ ン ド ウ 作 成 221 glutReshapeFunc ( reshape ); // R e s h a p e コ ー ル バ ッ ク 関 数 の 指 定 222 glutDisplayFunc ( display ); // D i s p l a y コ ー ル バ ッ ク 関 数 の 指 定 223 224 glutMouseFunc ( mouse ); // マ ウ ス ク リ ッ ク コ ー ル バ ッ ク 関 数 の 指 定 225 glutMotionFunc ( dragMotion ); // マ ウ ス ド ラ ッ グ コ ー ル バ ッ ク 関 数 の 指 定 226 glutSpecialFunc ( specialKey ); // 特 殊 キ ー コ ー ル バ ッ ク 関 数 の 指 定 ( 押 し た と き ) 227 // glutIgnoreKeyRepeat ( GL_TRUE ); // キ ー リ ピ ー ト 無 効 228 229 lightInit (); // 光 源 の 初 期 設 定 ( ま と め て 関 数 に し て い る だ け ) 230 231 glutMainLoop (); // メ イ ン ル ー プ へ 232 233 return 0; 234 }

参照

関連したドキュメント

(1) &amp; (3) Laser cutting underwater : Confirmation of performance and develop industrial head (2) Laser cutting in air (non-emerging) : Design,. build and trials of

画像 ノッチ ノッチ間隔 推定値 1 1〜2 約15cm. 1〜2 約15cm 2〜3 約15cm

1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月.

1月 2月 3月 4月 5月 6月 7月 8月 9月10月 11月 12月1月 2月 3月 4月 5月 6月 7月 8月 9月10月 11月 12月1月 2月 3月.

12月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月.

4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月

4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月

画像 ノッチ ノッチ間隔 推定値 1 1〜2 約15cm. 1〜2 約15cm 2〜3 約15cm