Texturing을 바로 다루기 전에, 셋팅해야 될 내용들이 있다.
1.Wrapping
0~1인 해당 범위를 벗어 났을 경우 어떻게 처리할 지에 대한 것이다.
Repeat와 Clamp가 있다.
Repear는 1을 다시 0부터 시작하게 하는 것이고, Clamp는 1이상은 모두 1로 처리하는 것이다.
2. Magnification, Minification
Texture의 크기 보다 크게 맵핑할 때(Magnification), 작게 맵핑할 때(Minification) 어떻게 처리할 지 우리가 미리 정해줘야된다.
그 방법으로는 Nearest(가까운 값 선택) , Interpolaion(보간)이 있다.
Nearest는 가까운 값을 선택하기 때문에 무늬가 생긴다. ( 부드럽게 처리가 아니라 색을 선택하기 때문에 순간적으로 색이 변화한다.)
Interpolaion은 보간하는 방법이기에 부드럽게 표현된다.
아래의 코드를 보게된다면 WRAPING과 (_S, _T는 uv좌표를 의미한다.) MAG,MIN Filter를 초기화해주는 것을 볼 수있다.
이렇게 초기화하면 Texture을 넘겨줘야 Texture를 사용할 수 있다.
glTexImage2D(GL_TEXTURE_2D,
0/*/mipmap*/, GL_RGB, w, h, 0 /*1 or 0*/, GL_BGR, GL_UNSIGNED_BYTE, img);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //GL_NEAREST
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
아래에서 Texture Color * (Ambient + Diffuse) + Specult 로 구현했다.
이것을 변형하면 색다르게 렌더링을 할 수 있다.
vec4 texColor = texture(uTex, T2);
vec4 cldColor = texture(uTexCld, T2 + vec2(uTime / 10, 0));
//fColor = (uAmb + uDif*NL)*texColor + uSpc*VR;
//fColor = (uAmb + uDif*NL) + uSpc*VR*texColor;
fColor = (uAmb + uDif * NL ) * (texColor + cldColor) + uSpc * VR;
좌측이 Linear ( 부드럽 ), 우측이 Nearest ( 딱딱 )이다.
이거는 단순히 격자무늬를 texture(배열로 만들어서 texture처럼 사용했다.)로 그린 것이지만 ,
그럴싸한 texture를 사용하면 더 멋이게 렌더링을 할 수 있다.
texture를 여러개 사용할 수도 있다.
'ComputerGraphics' 카테고리의 다른 글
[CG] Shadow Map using Depth Map (0) | 2024.12.08 |
---|---|
[CG] Depth Map(fog를 곁들인..) (0) | 2024.12.07 |
[CG] Cartoon Rendering(Non-Photorealistic Rendering) (0) | 2024.12.04 |
[CG]Phong Illumintaion Model: Flat, Smoothing Shading 이론 (0) | 2024.11.25 |
[CG]카메라 좌표계 변환 (MVP 중 View, Projection Matrix) (0) | 2024.11.18 |