1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #include <GL/glut.h> #include <GL/glu.h> #include <GL/glaux.h> #include <gl/glut.h> #include <math.h> #include <stdio.h> #include <iostream> using namespace std; 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( ); } } } |
'Study > OpenGL' 카테고리의 다른 글
OpenGL txt File 이용해 그래픽 불러 들이기 - bunny (1) | 2011.10.06 |
---|---|
OpenGL txt File 이용해 그래픽 불러 들이기 - box (0) | 2011.09.29 |
Opengl 3차원 텍스처 맵핑하기 (0) | 2011.09.27 |
OpenGl 구 표현하기 (카메라 추가) (0) | 2011.09.26 |
Opengl 구 그리기 (1) | 2011.09.22 |