gksrudtlr2.log
로그인
gksrudtlr2.log
로그인
05 텍스처와 UV
한경식
·
2024년 12월 17일
팔로우
0
DirectX
전 시간에 배운대로 사각형을 찍기 위해선 총 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에 셋팅해주면 이미지가 잘 나올것이다
결과
한경식
게임 개발 지망생
팔로우
이전 포스트
04 삼각형 그리기
다음 포스트
06 Constant Buffer
0개의 댓글
댓글 작성