Chap 9. 텍스쳐(Texture)
9.1 텍스쳐 맵
텍스쳐 의미 및 종류 텍스쳐: 물체 표면에 인위적으로 미세한 굴곡을 부여하여 주름 면을 형성=>물체 면에 그림을 추가 방법 범프 맵: 법선벡터를 조정하여 굴곡이 있는 것 처럼 텍스쳐 맵: 캡쳐된 영상을 물체 표면에 붙이기 라이트 맵: 텍스쳐 영상에 조명효과 추가, 텍스쳐와 조명 혼합 주변 매핑: 물체 주변의 영상을 물체 면에 붙임, 반짝이는 물체
9.2 텍스쳐 맵 기법
조명과 음영 계산의 시점 그래픽(기하) 파이프라인 영상 파이프라인 후면제거
텍셀과 텍스쳐 매핑 텍셀: 텟스쳐 영상의 기본 단위, 화소와 마찬가지로 (R,G,B,A)로 저장 예: 6☓5 크기의 2차원 배열로 저장. 텍스쳐 좌표는 정규화 형태로 표현. 텍스쳐 매핑: (s, t) 좌표로 표현된 2차원 텍스쳐 영상을 (x, y, z) 좌표로 표현된 3차원 물체면으로 사상
매핑 방법(1) 평면 사각형의 텍스쳐 매핑 곡면의 텍스쳐 매핑 파라미터 곡면 다각형 곡면 S-매핑
매핑방법(2) O-매핑 O-매핑 종류 주변매핑 S-매핑 O-매핑: 시점 반사벡터 방식 시점 반사벡터 방식
텍스쳐 기능 활성화 텍스쳐 영상 명시 텍스쳐 매핑 방법 할당 텍스쳐 파라미터 명시 텍스쳐 환경 명시 9.3 GL 텍스쳐 매핑 텍스쳐 기능 활성화 텍스쳐 영상 명시 텍스쳐 매핑 방법 할당 텍스쳐 파라미터 명시 텍스쳐 환경 명시
텍스쳐 기능 활성화 활성화/비활성화 형식: void glEnable(Glenum mode) mode=GL_TEXTURE_1D, GLTEXTURE_2D, GL_TEXTURE_3D − void glDisable(mode) 텍스쳐 영상 준비 배열에 저장: Glubyte MyTexture[Width][Height][3] Width=텍스쳐 s축, Height=텍스쳐 y축 MyTexture[w][h][3], 텍셀의 RGB성분 저장
텍스쳐 영상 명시 영상명시 void glTexImage2D(target, level, internalformat, width,height,border,format,type, Glvoid *texture); target=GL_TEXTURE_1D, internalformat=텍셀형식, format,type=텍셀형식 자료 크기, *texture=배열 glTexImage2D()의 기능 프로세서 메모리 => 텍스쳐 버퍼 (참고: 메모리=>프레임 버퍼) 기타 명령: glTexSubImage2d(): 텍스쳐 버퍼의 내용을 변경, 텍스쳐 무비 구현 가능 glCopyTexImage2D(); 화면 영상의 일부를 텍스쳐 바퍼로 복사
텍스쳐 매핑 방법 할당(1) 수동 텍스쳐 매핑 glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(0.2, 0.8); 텍스쳐 정점 a를 glVertex3f(7.5, 10.5, 0.0); 물체 정점 A에 할당 glTexCoord2f(0.4, 0.2); 텍스쳐 정점 b를 glVertex3f(0.0, 3.8, 0.0); 물체 정점 B에 할당 glTexCoord2f(0.8, 0.4); 텍스쳐 정점 c를 glVertex3f(12.0, 0.0, 0.0); 물체 정점 C에 할당 glEnd( );
텍스쳐 영상 방법 할당(2) 자동 텍스쳐 매핑 기준 평면과 물체 정점과의 거리로 좌표 할당 GL_OBJECT_LINEAR: 정점/기준평면 물체공간에서 정의 GL_EYE_LINEAR: 정점/기준평면 시점 좌표계에서 정의 GL_SPHERE_MAP: 주변 매핑 반사 원구를 놓고 반사된 배경을 촬영 카메라를 회전시키며 주변 모습 촬영
텍스쳐 영상 방법 할당(3) 명령어 모든 축에 대해 명시 glTexGen{ifd}[v](coord, pname,param); cood: 자동 매핑하고자 하는 축(예,s, t) pname: 설정 매개변수 이름 - param: 상수값(표참조) glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); glTexGenfv(GL_S,GL_OBJECT_PLANE,MyPlane); MyPlane[]: Ax+By+Cz+D=0에서 계수 저장 예: 물체 정점과 MyPlane을 기준으로 텍스쳐 좌표 자동 할당 Static Glfloat MyPlane[]={1.0,0.0,0.0,0.0}; glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR); glTexGenfv(GL_S,GL_EYE_PLANE,MyPlane); glEnable(GL_TEXTURE_GEN_S); 모든 축에 대해 명시 ……………………… glEnable(GL_TEXTURE_GEN_S);glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_GEN_R); …………… 좌표 자동 할당 glEnable(GL_TEXTURE_GEN_S); 텍스쳐 s축 GL_TEXTURE_GEN_T GL_TEXTURE_GEN_R…..
텍스쳐 파라미터 명시(1) 텍스쳐 확장 화소 텍셀결정 텍스쳐를 어떻게 확장할까? 화소의 텍스쳐를 어떻게 정할까? 명령어 void glTexParameter(target,pname,param); target: GL_TEXTURE_2D.. pname: 파라미터 이름 param: 상수 glTexParameter() 함수의 파라미터 텍스쳐 확장 target pname param GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_WRAP_S GL_REPEAT, GL_CLAMP GL_TEXTURE_WRAP_T GL_REPEAT,GL_CLAMP GL_TEXTURE_MAG_FILTER GL_NEAREST,GL_LINEAR GL_TEXTURE_MIN_FILTER GL_NEAREST,GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, …………………. GL_TEXTURE_BORDER_COLOR Any 4 Values in[0.0,1.0] 화소 텍셀결정
텍스쳐 파라미터 명시(2) 영상 확장: GL_TEXTURE_WRAP_S… GL_REPEAT GL_CLAMP 화소결정: GL_TEXTURE_MAG_, GL_TEXTURE_MIN_ GL_NEAREST GL_LINEAR
텍스쳐 환경 명시 물체 면의 색과 텍스쳐를 혼합 명렬어 glTexEnv(target,pname,param) pname GL_TEXTURE_ENV_MODE GL_DECAL, GL_REPLACE, GLMODULATE,GL_BLEND GL_TEXTURE_ENV_COLOR RGBA 배열