1. Why is the use of Texture Mapping
- 적은 수의 폴리곤으로 효과적인 렌더링을 할 수 있다.
1.2. Steps of Texture Mapping
① 텍스처 오브젝트를 만들고, 오브젝트에 해당하는 텍스처를 명시해야 한다.
② 텍스처가 어떻게 각각의 픽셀과 연관되어 있는지에 고나해 나타내어야 한다.
③ 텍스처 매핑을 활성화 한다.
④ 텍스처와 기하학적 좌표가 제공된 장면을 렌더링 한다.
2. Example Texture Mapping
AUX_RGBImageRec *LoadBMPFile(char *filename) { FILE *hFile = NULL if(!filename) return NULL if(hFile = fopen(filename, "r")) { fclose(hFile); return auxDIBImageLoad(filename); // BMP 정보를 리턴해 준다 } return NULL } void CreateTexture() { AUX_RGBImageRec *texRec[1]; // RGB정보를 가지는 구조체 정의 // 텍스쳐매핑초기화 if(texRec[0] = LoadBMPFile("img.bmp")) { glGenTextures(1, &g_Texture[0]); // 객체의 이름을 만들어 준다 // 첫 번째 인자: 몇 개의 텍스쳐 텍스쳐 맵핑 소스를 생성할 것인지 지정 // 두 번째 인자: 첫 번째 텍스쳐 맵핑 소스의 식별자의 주소값 glBindTexture(GL_TEXTURE_2D, g_Texture[0]); //앞으로 설정할 텍스쳐의 식별자를 지정 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //GL_TEXTURE_MIN_FILTER: 맵핑 소스가 맵핑되어질 물체보다 클 경우 //GL_TEXTURE_MAG_FILTER: 맵핑 소스가 맵핑되어질 물체보다 작을 경우 //GL_NEAREST_MIPMAP_LINEAR OpenGL 고화질 //GL_NEAREST_MIPMAP_NEAREST OpenGL 저화질. 권장. //GL_NEAREST_MIPMAP_LINEAR OpenGL 고화질 //GL_LINEAR_MIPMAP_NEAREST Direct3D 저화질. 권장. //GL_LINEAR_MIPMAP_LINEAR 주로 배경(벽이나 지면의 재질감)의 설정 //GL_LINEAR : 보간법 //GL_NEAREST : 최근점법 glTexImage2D(GL_TEXTURE_2D, 0, 3, texRec[0]->sizeX, texRec[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texRec[0]->data); // 두 번째 인자 : 항상 0, 세 번째 인자: 색상 구성 요소의 개수 RGB 3 개,여섯번째: 이미지 경계에 대한 픽셀 두께, 여덟 번째: 색상 구성 요 소들이 갖는 값의 타입 } if(texRec[0]) // 할당된 메모리를 해제 { if(texRec[0]->data) { free(texRec[0]->data); free(texRec[0]); } } glEnable(GL_TEXTURE_2D); //텍스쳐 맵핑 사용함을 알림 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } void RenderScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(0, 0, 6, 0,0,0, 0,1,0); glBindTexture(GL_TEXTURE_2D, g_Texture[0]); glBegin(GL_QUADS); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1, 1, 0); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1, -1, 0); glTexCoord2f(1.0f, 0.0f); glVertex3f(1, -1, 0); glTexCoord2f(1.0f, 1.0f); glVertex3f(1, 1, 0); glEnd(); SwapBuffers(g_hDC); }※ texel - 텍스처 데이터(컬러, 명도, 컬러와 알파 데이터)들의 사각형 배열 각각의 값
※ tessellation - 폴리곤의 각 꼬지점만을 명시해주면 자동으로 폴리곤을 오목한 부분이 없도록 쪼개서 연출해주는 기능
'프로그래밍 > OpenGL' 카테고리의 다른 글
옥트리(octree) (0) | 2009.04.25 |
---|---|
OpenGL Viewing (0) | 2009.04.24 |
OpenGL 기초 (1) | 2009.04.23 |
Picking 사용하기 (0) | 2009.04.22 |
void glutIdleFunc(void (*func)(void)) (0) | 2009.04.22 |