나만의 공부 노트

Texture 본문

Graphics/OpenGL

Texture

va95 2023. 12. 29. 01:51

TEXTURE WRAPPING

  • [0, 1] 범위를 벗어난 텍스처 좌표값을 처리하는 옵션

TEXTURE FILTERING

  • Filtering option
    • 텍스처로 사용할 이미지의 크기가 화면보다 크거나 작을 경우 처리하는 옵션
    • GL_NEAREST: 텍스처 좌표값에 가장 가까운 픽셀값을 사용
    • GL_LINEAR: 텍스처 좌표값 주변 4개의 픽셀값을 보간하여 사용
  • GL_NEAREST

  glGenTextures(1, &m_texture);
  glBindTexture(GL_TEXTURE_2D, m_texture);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->GetWidth(), image->GetHeight(),
               0, GL_RGB, GL_UNSIGNED_BYTE, image->GetData());
  • GL_TEXTURE_MIN_FILTER : 이미지를 축소할 때
  • GL_TEXTURE_MAG_FILTER : 이미지를 확대할 때
  • GL_TEXTURE_WRAP_S : x
  • GL_TEXTURE_WRAP_T : y
  • void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * data);
    • level : 밉맵
    • GLint internalformat, GLsizei width, GLsizei height : GPU 상의 이미지 메모리
    • border : GPU 상의 이미지 외곽 경계
    • GLenum format, GLenum type, const void * data : CPU 상의 이미지 메모
    • 텍스처의 크기
      • 가로/세로의 크기가 2의 지수 형태일 때 GPU가 가장 효율적으로 처리할 수 있다
      • NPOT (Non-Power-Of-Two) texture
        • 2의 지수 크기가 아닌 텍스처는 GPU의 스펙에 따라 지원을 안하는 경우도 있다

  • Mipmap
    • 화면 픽셀이 여러 텍스처 픽셀을 포함하게 될 경우를 위해서 작은 사이즈의 이미지를 미리 준비하는 기법

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  glGenerateMipmap(GL_TEXTURE_2D);
  • GL_NEAREST_MIPMAP_NEAREST: 적합한 레벨의 텍스처를 선택한 뒤 nearest neighbor 픽셀을 선택한다
  • GL_LINEAR_MIPMAP_LINEAR: 적합한 두 레벨의 텍스처에서 linear filtering된 값을 다시 linear interpolation한다 (trilinear interpolation)

Multiple Texture

  • 한 쉐이더에서 동시에 쓸 수 있는 텍스쳐 갯수는 32개
    • glActiveTexture(textureSlot) 함수로 현재 다루고자 하는 텍스처 슬롯을 선택
    • glBindTexture(textureType, textureId) 함수로 현재 설정중인 텍스처 슬롯에 우리의 텍스처 오브젝트를 바인딩
    • glGetUniformLocation() 함수로 shader 내의 sampler2D uniform 핸들을 얻어옴
    • glUniform1i() 함수로 sampler2D uniform에 텍스처 슬롯 인덱스를 입력

'Graphics > OpenGL' 카테고리의 다른 글

GLSL  (0) 2023.12.28
삼각형 그리기  (0) 2023.12.27
초기 세팅과 관련해서 공부한 내용  (1) 2023.12.26