Texture Wrapping Mode
texture wrapping mode를 활용하면
(s, t)가 0, 1 범위가 아닌 경우에도 쉽게 활용할 수 있다
0, 1 범위 밖에서 texture coordinates에 맞게 어떻게 색상을 표시할지
옵션을 정해서 결정할 수 있다
Clamp-to-Edge
1 이상의 좌표를 모두 1의 좌표로 계산한다
Repeat
(1, 1)을 (0, 1)로 계산한다
Mirrored-Repeat
(1, 1)을 (0, 9)로 계산하고 좌우반전이 된다
S(Repeat) + T(Mirrored-Repeat)
각 축에 따라 다른 설정을 할 수도 있다
S축은 Repeat을 하고 T축은 Mirrored-Repeat을 할 수 있다
Texture Filtering
픽셀과 텍셀의 개수가 동일하지 않으며
(s', t')이 텍셀의 정중앙에 위치하지 않을 경우가 발생할 수 있다
pixels가 많으면 Magnification을 해야 하고
texels가 많으면 Minification을 해야 한다
Magnification은 pixels > texels의 경우를 의미한다
Minification은 pixels < texels의 경우를 의미한다
Texture Filtering for Magnification
Magnification 경우에 처리 방법은
Nearest point sampling과 Bilinear interpolation 방법이 있다
1) Nearest point sampling
가장 가까운 텍셀의 색상을 사용하여 확대 또는 축소된 이미지의 픽셀 값을 설정한다
픽셀 좌표를 변환할 때, 가장 가까운 텍셀의 색상을 새로운 픽셀 값으로 사용한다
계산이 단순하고 빠르지만, 결과물이 깨끗하지 않을 수 있으며
확대 시 픽셀의 간격이 큰 경우 이미지가 거칠게 보이는
blocky image가 발생하는 문제가 있다
2) Bilinear interpolation
주변 네 개의 텍셀의 색상을 사용하여 새로운 픽셀 값을 보간하는 방법이다
픽셀 좌표를 변환할 때, 주변 네 개의 텍셀에 대해 가중치를 적용하여 새로운 픽셀 값을 계산한다
가중치는 해당 픽셀과 주변 텍셀들의 거리에 따라 결정된다
계산이 느리지만, 이미지를 부드럽게 확대 또는 축소할 수 있으며
결과물이 더 자연스럽고 block image가 발생하지 않는다
Texture Filtering for Minification
Minification 경우에 footprint가 넓어지면서 문제가 발생하고
이러한 문제를 aliasing이라고 한다
이를 해결하기 위해서
footprint에 따라서 해상도가 1/2 씩 줄어드는 mipmap 피라미드를 만들고
footprint의 log m을 적용해서 해당하는 level을 정하고 반올림을 해서 사용한다
반올림을 하고 난 뒤에는 nearest point 방식이나 bilinear interpolation 방식을 선택하거나
trilinear interpolation 방식을 사용하면 된다
trilinear interpolation 방식은 두가지의 level에서의 interpolation을 한 다음
그 둘의 가중치를 줘서 interpolation을 통해 부드러운 이미지를 얻을 수 있다
Texture Filtering & Wrapping in GL
Texture Filtering과 Wrapping을 설정하기 위해서는
glTexParameteri()를 이용해서 설정 가능하다
GL_TEXTURE_MAG_FILTER에는
nearest와 linear 옵션이 있고
GL_TEXTURE_MIN_FILTER에는 아래와 그림과 같은 옵션이 있다
빨간 부분은 일반적인 nearest와 linear(bilinear) 옵션을 의미하고
파란 부분에서 nearest는 반올림을 하는 것이고 linear는 한번 더 interpolation을 하는 trilinear를 의미한다
'게임 그래픽스 > [전북대] OpenGL' 카테고리의 다른 글
[OpenGL Note] Lighting - Diffuse, Specular (0) | 2024.04.19 |
---|---|
[OpenGL Note] Fragment Shader (0) | 2024.04.18 |
[OpenGL Note] Image Texturing (0) | 2024.04.17 |
[OpenGL Note] Rasterizer (0) | 2024.04.17 |
[OpenGL Note] Vertex Shader (0) | 2024.04.16 |