[HCI] Graphics & OpenGL 4

2025. 4. 22. 22:21·강의/HCI

Textures

객체에 디테일을 더하기 위한 2D 이미지

  • 텍스쳐를 도형에 매핑하려면 도형의 vertex가 texture의 어느 위치에 해당하는지 지정해야됨
  • 텍스쳐 좌표계 : 왼쪽 아래 원점(0,0)을 기준으로 x,y축에서 0~1사이의 값
  • 텍스쳐 좌표계를 통해 가져온 텍스쳐의 색상 : sampling

 

Texture Wrapping

텍스쳐의 좌표 범위는 (0,0)에서 (1,1). 이 범위 밖의 좌표 → 기본적으로 텍스쳐 반복함

  • GL_REPEAT: 기본 반복
  • GL_MIRRORED_REPEAT: 대칭 반복
  • GL_CLAMP_TO_EDGE: 0과 1 사이의 좌표를 clamping
  • GL_CLAMP_TO_BORDER: 지정한 색으로 채움

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // x축
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // y축

(텍스쳐가 2D, x축(_S) /y축(_T)의 옵션 설정, texture wrapping 모드)

 

float borderColor[] = { 1.0, 1.0, 0.0, 1.0f };
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); //x축
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); //y축
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);

GL_CLAMP_TO_BORDER의 경우 glTexParameterfv 함수 사용해 border 색상 설정

 

Texture Filtering

텍스쳐 좌표는 어떤 실수값도 될 수 있다. 어떤 텍스쳐 이미지의 픽셀(=텍셀 texel)에 텍스쳐 좌표를 매핑할지 결정하는 옵션 : texture filtering

큰 객체에 저해상도의 텍스쳐를 매핑할때 중요한 이슈 (이미지 확대 생각하기)

  • Nearest Neighbor, Point Filtering

가장 가까운 픽셀의 색상 사용 ⇒ GL_NEAREST

 

  • Linear Filtering or Bilinear Filtering

텍스쳐 좌표 주위의 텍셀 색상들을 interpolation. 텍스쳐 좌표와 가까운 텍셀일수록 해당 색상의 weight 커짐

 

MipMaps

  • 멀리 떨어져 있는 객체가 가까이 있는 객체와 해상도가 같은 경우, 멀리 떨어진 객체는 적은 수의 fragment로 표현 ⇒ artifact 발생가능. 고화질의 텍스쳐 정보 지니면 메모리 낭비
  • MipMap : 텍스쳐 이미지들의 크기 별 집합
  • 거리가 멀어지면 저화질의 텍스쳐 매핑해 메모리 낭비를 줄일 수 있다.

 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); //축소
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //확대
  • 2번째 파라미터 : 객체를 확대하거나 축소할때 어떤 texture filtering을 사용할지
  • 3번째 파라미터 : 확대나 축소시 mipmap들을 어떻게 사용할지
    • GL_NEAREST_MIPMAP_NEAREST : 가장 가까운 mipmap 선택 → nearest 샘플링
    • GL_LINEAR_MIPMAP_NEAREST : 가장 가까운 1개 선택 → linear 샘플링
    • GL_NEAREST_MIPMAP_LINEAR : 가장 가까운 2개 interpolation → nearest 샘플링
    • GL_LINEAR_MIPMAP_LINEAR : 가장 가까운 2개 interpolation → linear 샘플링

 

Loading a Texture

  • stb_image.h
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
  • 텍스쳐 파일 로딩
int width, height, nrChannels;
unsigned char *data = stbi_load(“container.jpg", &width, &height, &nrChannels, 0);

 

Generating a Texture

  • Texture 생성
unsigned int texture;
glGenTextures(1, &texture1);
//(생성할 텍스쳐 수, 리턴받을 texture array)
  • Texture 객체 바인드
glBindTexture(GL_TEXTURE_2D, texture1);
  • glTextImage2D
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
// (텍스쳐 타겟, mipmap 레벨(기본 0), 텍스쳐를 저장하고자 하는 포맷 지정
// 텍스쳐의 넓이, 높이, border, 소스 이미지의 포맷, 데이터타입, 텍스쳐 데이터 포인터)

 

Applying Textures

 

 

 

'강의 > HCI' 카테고리의 다른 글

[HCI] Graphics & OpenGL 3  (0) 2025.04.03
[HCI] Graphics & OpenGL 2  (0) 2025.04.02
[HCI] Graphics & OpenGL 1  (1) 2025.03.26
'강의/HCI' 카테고리의 다른 글
  • [HCI] Graphics & OpenGL 3
  • [HCI] Graphics & OpenGL 2
  • [HCI] Graphics & OpenGL 1
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    게임수학
    컴퓨터 구조
    컴퓨터구조
    Effective
    그래픽스
    자료구조
    객체지향
    c++
    내일배움캠프
    언리얼
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[HCI] Graphics & OpenGL 4
상단으로

티스토리툴바