#include#include "glaux.h" #include GLfloat xrot=0.9f, yrot=0.8f, zrot=1.0f; unsigned int MyTextureObject[1]; AUX_RGBImageRec *pTextureImage[1]; //텍스쳐 저장 공간을 가리키는 포인터 void MyReshape(int w, int h){ glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0, (GLfloat)w/(GLfloat)h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void MyDisplay( ){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, MyTextureObject[0]); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); //앞면 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //뒷면 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); //윗면 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //아랫면 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); //우측면 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //좌측면 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glEnd(); glutSwapBuffers(); } void MyTimer(int Value){ glRotatef(xrot,1.0f,0.0f,0.0f); glRotatef(yrot,0.0f,1.0f,0.0f); glRotatef(zrot,0.0f,0.0f,1.0f); glutPostRedisplay( ); glutTimerFunc(50, MyTimer, 1); } AUX_RGBImageRec * LoadBMP(char *szFilename){ FILE * pFile = NULL; if(!szFilename){ return NULL; } pFile = fopen(szFilename,"r"); if(pFile){ fclose(pFile); return auxDIBImageLoad(szFilename); //파일로부터 메모리로 } return NULL; } int LoadGLTextures(char * szFilePath){ //파일을 로드하고 텍스쳐로 변환 int Status = FALSE; glClearColor(0.0, 0.0, 0.0, 0.5); memset(pTextureImage, 0, sizeof(void *)*1); //포인터를 널로 //비트맵을 로드하고 오류확인 if (pTextureImage[0]=LoadBMP(szFilePath)){ Status=TRUE; //상태 플랙을 True로 glGenTextures(1, &MyTextureObject[0]); //텍스쳐 생성 glBindTexture(GL_TEXTURE_2D, MyTextureObject[0]); glTexImage2D(GL_TEXTURE_2D, 0, 3, pTextureImage[0]->sizeX, pTextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pTextureImage[0]->data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glEnable(GL_TEXTURE_2D); } if (pTextureImage[0]){ //텍스쳐가 존재하면 if (pTextureImage[0]->data){ //텍스쳐 영상이 존재하면 free(pTextureImage[0]->data); //텍스쳐 영상공간 반납 } free(pTextureImage[0]); //텍스쳐 반납 } return Status; } void main(int argc, char * argv[ ]){ if(argc <= 1){ printf("\n%s\n\n","Usage : TextureDLG3_Consol.exe [BMPFileName.bmp]"); exit(1); } else if(argc > 2){ printf("\nToo Many Arguments!\nArgument is Only one\n"); exit(1); } else{ glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("OpenGL Sample Program"); glutDisplayFunc(MyDisplay); glutReshapeFunc(MyReshape); glutTimerFunc(500,MyTimer,1); if(LoadGLTextures(argv[1])){ glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); glutMainLoop( ); } } }
몇가지 작업을 해서 도출해야 합니다.
작업이 어려운건 아니고. 케릭터 집합을 유니코드에서 멀티바이트로 바꾸어 주시던지, 아니면 케스팅을 하시면 되고,
glaux 라이브러리가 설치 되어있지 않다면 glaux.lib를 속성->링크->입력에서 추가를 하시던지 아니면 소스코드 상에서 #pragma를 이용해서 넣어주시면 됩니다.
실습 결과
'MISCELLANEOUSNESS' 카테고리의 다른 글
아이폰 개발 공부하기. (0) | 2010.05.21 |
---|---|
OpenGL 지형 렌더링 (10) | 2010.05.18 |
Energy Up HOT6 ix (6) | 2010.05.09 |