05 텍스처와 UV

한경식·2024년 12월 17일
  • 전 시간에 배운대로 사각형을 찍기 위해선 총 6개의 정점이 필요하다
  • 이러한 정점들을 넘버링해서 만들어 정점의 갯수를 줄여 사각형을 그려 더욱 효율적이고 크기를 줄일 수 있는 방법을 사용하기 위해 IndexBuffer가 필요하다
  • Index Buffer

    • 정의
      • 그래픽스에서 메모리 효율을 높이고 속도를 개선하기 위해 사용하는 데이터 구조
      • Vertex Buffer를 중복 없이 관리하고 재 사용할 수 있도록 만들어진 배열
    • Index Buffer 만들기
      • verticies 배열의 index를 시계 방향으로 그려 질 수 있게 번호를 붙여 indices에 저장한뒤 Vertex Buffer를 만든 방법으로 Index Buffer를 만들어준다
    • Render
      • deviceContext에서 index buffer를 설정해준다
      • 기존의 Draw 함수가 아닌 DrawIndex를 통해 사각형을 그려주면 된다

  • 결과

  • UV

    • 정의
      • 텍스처 좌표를 의미
      • 텍스처 맵핑에서 특정 버텍스가 텍스처 이미지의 어느 위치를 참조해야하는지 정의하는 좌표체계
      • U는 가로(x축), V는 세로(y축) 방향으로 2D 평면으로 지정
      • 0~1 범위의 값을 가지고 있는 Vector2 변수
    • UV 좌표
  • Texture 찍기

    • 지금까지 화면에 찍은 사각형을 Texture로 바꾸는 것을 할 것이다
    • Vertex 구조체에서 Vector2로 uv를 만들어 사용할 것이다
    • Shader
      • 이번에는 Texture의 색상을 그대로 사용할 것이므로 color를 uv로 사용할 것이다
      • Texture2D와 SamplerState 변수를 만들어 register와 연결해 줄것인데 t는 Texture, s는 Sampler의 약자이다
      • 이때 Texture와 사용할 Sampler의 갯수만큼 변수를 늘려줘야 한다
      • PS에서 texture0에 uv를 가지고 색을 빼내서 사용해준다
    • Layout 변경
      • CreateInputLayout을 해주기 전 D3D11_INPUT_ELEMENT_DESC로 만들었던 변수에 Texture를 Shader로 넘겨줘야 한다
      • 이때 보통 TEXCOORD를 사용한다
      • 3번째 변수는 현재 Texture2D를 사용해 2D 이미지를 넘겨주므로 R32G32_FLOAT으로 변경해준다
      • 5번째 값인 byteOffset은 현재는 Vertex에서 Color를 사용하지 않기 때문에 12를 그대로 쓰지만 Color나 다른 변수가 uv보다 앞에 있다면 계산을 해서 변경해줘야한다
    • CreateShaderResourceView
      • LOADFromWICFile 함수를 통해 코드가 있는 폴더에서 원하는 이미지 파일을 가져와 준다
      • CreateShaderResourceView 함수를 통해 device로 이미지를 ID3D11ShaderResourceView 변수에 저장하여 SRV를 만들어 준다
      • 역시 Init 함수에서 InputLayout 이후 CreateSRV 함수를 호출해 실행 시 이미지를 불러와 stv를 만들 수 있게 해준다
    • Render
      • srv처리는 역시 PS 단계에서 해줘야 한다
      • PSSetShaderResources함수를 사용해 srv를 PS에 셋팅해주면 이미지가 잘 나올것이다
    • 결과
profile
게임 개발 지망생

0개의 댓글