묻공러
[OpenGL Note] Texture Wrapping과 Texture Filtering
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (487)
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 (124)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
      • 유니티 (1)
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
게임 그래픽스/[전북대] OpenGL

[OpenGL Note] Texture Wrapping과 Texture Filtering

2024. 4. 18. 12:10

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을 정하고 반올림을 해서 사용한다

mipmap

반올림을 하고 난 뒤에는 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
'게임 그래픽스/[전북대] OpenGL' 카테고리의 다른 글
  • [OpenGL Note] Lighting - Diffuse, Specular
  • [OpenGL Note] Fragment Shader
  • [OpenGL Note] Image Texturing
  • [OpenGL Note] Rasterizer
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.