最終更新: mikk_ni3_92 2009年12月07日(月) 17:24:50履歴
現在地 >> メニュー >> GLE >> GLE::08 >> GLE::08::まとめ
#include <iostream> #include <cv.h> #include <highgui.h> #include <gl/glut.h> #include <gl/gle.h> #ifdef _DEBUG #pragma comment(lib,"gled.lib") #pragma comment(lib,"cv200d.lib") #pragma comment(lib,"highgui200d.lib") #pragma comment(lib,"cxcore200d.lib") #else #pragma comment(lib,"gle.lib") #pragma comment(lib,"cv200.lib") #pragma comment(lib,"highgui200.lib") #pragma comment(lib,"cxcore200.lib") #endif //---------- プロトタイプ宣言 --------------// void display(); void reshape(int w, int h); void DRAW_XYZ(); //----- テクスチャID -----// GLuint texture[1]; const char *filename = "file2.jpg"; //輪郭 double contour[][2]= { {-0.5, 0.5}, {-0.5, -0.5}, {0.5, -0.5}, {0.5, 0.5} }; //輪郭線の法線 double cont_normal[][2]= { {-1,0}, {0,-1}, {1,0}, {0,1} }; //upベクトル double upvec[3]={0,1,0}; //------------ OpenGLの初期化 ------------------// void timer(int val) { glutPostRedisplay(); glutTimerFunc(34,timer,34); } void GLUT_CALL_FUNCs() { glutDisplayFunc(display); glutReshapeFunc(reshape); glutTimerFunc(0,timer,34); } void OtherMyInit() { glClearColor(1.0, 1.0, 1.0, 1.0); glEnable(GL_DEPTH_TEST); //光源の有効化 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); //glColorによる材質設定 glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); //描画スタイル gleSetJoinStyle (TUBE_NORM_FACET | TUBE_JN_RAW | TUBE_JN_CAP | TUBE_CONTOUR_CLOSED); //テクスチャ座標の自動生成 gleTextureMode (GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_CYL); } void GLUT_INITs(int *argcp, char **argv) { glutInit(argcp,argv); glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(640,480); glutCreateWindow("gleScrew with texture"); GLUT_CALL_FUNCs(); OtherMyInit(); } void LoadTexture() { cv::Ptr<IplImage> imgA = cvLoadImage(filename); if(imgA.empty()) { std::cerr << "Can' Load Image \n"; exit(0); } cvConvertImage(imgA,imgA,CV_CVTIMG_FLIP | CV_CVTIMG_SWAP_RB); glGenTextures(1, &texture[0]); glBindTexture(GL_TEXTURE_2D, texture[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); //フィルタ glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, imgA->width,imgA->height, GL_RGB,GL_UNSIGNED_BYTE,imgA->imageData); } //--------- メイン関数 ----------------// int main(int argc, char **argv) { GLUT_INITs(&argc,argv); LoadTexture(); glutMainLoop(); return 0; } //------------- ここから各種コールバック -----------------// void display() { static int r = 0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(13.0, 14.0, 15.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); static float Light0Pos[]={50,50,50,0}; //光源の位置 glLightfv(GL_LIGHT0, GL_POSITION, Light0Pos);//位置だけ設定(あとはデフォルト) glColor3f(1,1,1); glPushMatrix(); glRotatef(static_cast<float>(r),0,1,0); glEnable (GL_TEXTURE_2D); gleScrew(4,contour,cont_normal, upvec,-1,3,90); glDisable (GL_TEXTURE_2D); DRAW_XYZ(); glPopMatrix(); glutSwapBuffers(); if( ++r >360) r = 0; } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, (double)w / (double)h, 1.0, 200.0); glMatrixMode(GL_MODELVIEW); } void DRAW_XYZ() { glDisable(GL_LIGHTING);//光源の有効化 glDisable(GL_LIGHT0); glBegin(GL_LINES); glColor3f(0,1,0);//x glVertex2f(-100,0); glVertex2f(100, 0); glColor3f(1,0,0);//y glVertex2f(0,0); glVertex2f(0,100); glColor3f(0,0,1);//z glVertex3f(0,0,-100); glVertex3f(0,0, 100); glEnd(); glEnable(GL_LIGHTING);//光源の有効化 glEnable(GL_LIGHT0); }