最終更新:
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);
}
最新コメント