最終更新:
mikk_ni3_92 2008年09月02日(火) 15:56:30履歴
現在地 >> メニュー >> サンプルコード::OpenGL >> OpenCVとスフィアマッピング
関連:基本編07
関連:基本編07
#include <iostream> #include <cv.h> #include <highgui.h> #include <GL/glut.h> //------ プロトタイプ宣言 --------// void display(); void reshape(int w, int h); //-------- テクスチャID用 ---------------// GLuint texture[1]; //-------- 画像読み込みとテクスチャの作成 ---------// bool LoadGLTextures() { IplImage *image1=cvLoadImage("test2.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if(image1==NULL){ std::cerr << "Can't Load image\n"; return false; } cvFlip(image1,NULL,0); //------ テクスチャの作成 ---// glGenTextures(1, &texture[0]); glBindTexture(GL_TEXTURE_2D, texture[0]); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB, image1->width,image1->height,0, GL_BGR,GL_UNSIGNED_BYTE,image1->imageData); cvReleaseImage( &image1 ); return true; }; //------------- OpenGLの初期設定 ------------------// void GLUT_INIT() { glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("Sphere Map"); } void GLUT_CALL_FUNC() { glutDisplayFunc(display); glutReshapeFunc(reshape); } void MY_INIT() { glClearColor(1.0, 1.0, 1.0, 1.0); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); //スフィアマップ(S座標) glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); //スフィアマップ(T座標) glEnable(GL_DEPTH_TEST); } //----------- メイン関数 -----------------// int main(int argc, char **argv) { glutInit(&argc,argv); GLUT_INIT(); GLUT_CALL_FUNC(); MY_INIT(); if(LoadGLTextures() == false){ return -1; } glutMainLoop(); return 0; } /********[ここからコールバック]****************************************/ void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glPushMatrix(); glutSolidTeapot(1); glPopMatrix(); glDisable(GL_TEXTURE_GEN_T); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_2D); glutSwapBuffers(); } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); }