Texture 파일을 불러와서
Vertex로 만든 사각형에 채워넣어보자
먼저 UV좌표계를 알아야한다
UV좌표계는 2D로, 0~1까지 정규화된 값으로 uv 비율을 표현한다
좌상단이 (0, 0)인것이 특징이며 Vector2로 나타낸다
Texture 파일을 불러오는 첫 번째 방법
ID3D11ShaderResourceView 사용하기
ID3D11ShaderResourceView* srv;
ID3D11ShaderResourceView는 셰이더에 Texture을 넘겨주는 역할을 한다
D3DX11CreateShaderResourceViewFromFile
(
D3D::GetDevice(), L"../../_Textures/Box.png", NULL, NULL, &srv, NULL
);
셰이더
Texture2D Map;
SamplerState Samp;
float4 PS(VertexOutput input) : SV_Target
{
return Map.Sample(Samp, input.Uv);
}
Sample() 은 uv 비율에 따른 확대/축소를 결정한다
SamplerState에 대해서는 좀 더 아래에서 설명한다
두 번째 방법
이미지를 쉽게 불러올 수 있는 DirectXTex 라이브러리를 사용한다
texture = new Texture(file);
텍스쳐를 동적할당 해주고
if(texture != NULL)
shader->AsSRV("Map")->SetResource(texture->SRV());
이러한 방식으로 텍스쳐를 불러올 수 있다
근데 이제 궁금한게 생긴다
uv좌표계는 0~1이라고 했는데
만약 uv값이 1을 넘는다면 어떻게 될까 ??
그리고 만약에 uv값이 (0.5, 0.5)일 경우엔 어떻게 될까?
먼저 uv가 ( 0.5, 0.5) 일 경우를 생각해보자
uv는 비율이다
uv는 정규화된 값으로 최대가 1이다
원래 텍스쳐의 전부를 그리면 1을 그린것이다
uv가 0.5라는 뜻은 원래 텍스쳐의 반만 사용한다는 것!
따라서 텍스쳐가 잘려져서 나온다
그러면 반대로 uv가 (2, 2)라면 ?
텍스쳐의 크기는 작아져 비어있게 되는 공간이 생기게 된다
이렇게 텍스쳐가 작게 발라지게 된다
여기서 나오는 것이 위에서 말했던 SamplerState이다
SamplerState는 Filter와 Address가 있는데
먼저 Filter는 텍스쳐의 축소/ 확대 시 픽셀이 사라지거나 늘어날 때의 보간 처리를 결정하는데
이렇게 다양한 종류가 있다
여기서 먼저 알아야 할 것은 계속해서 나오는 저 MIN MAG MIP이 무엇인가
그리고 POINT와 LINEAR의 차이가 무엇인가 이다
MIN(minification)은 축소, MAG(magnification)은 확대, MIP(mipmap)은 밉맵이라는 개념이다
Mipmapping이란, LOD(Level Of Detail)의 개념으로 퍼포먼스가 중요한 게임이 아니라면 잘 사용하지 않는 기능이다
Point와 Linear의 차이점은,
Point는 텍스쳐 좌표에 대한 텍스쳐 값을 상수 보간으로 구하는 것,
Linear는 선형 보간으로 구하는 것을 말한다
따라서 MIN_MAG_MIP_POINT란, 축소/확대/밉맵에 대해서 상수 보간을 사용하겠다
MIN_POINT_MAG_LINEAR_MIP_POINT는 축소와 밉맵은 상수보간을, 확대에 대해서는 선형보간을 사용하겠다는 뜻이 된다
Address는 uv가 1보다 큰 값일 경우에 이미지로 채우고 남는 영역을 어떻게 채울지 결정한다
Wrap : 같은 텍스쳐를 반복
Mirror : 겹치는 축으로 대칭
Clamp : 겹치는 곳으로 쭉 늘어뜨리기
Border : 테두리로 만들기 ( 색상 설정도 가능 )
'> Study > DirectX' 카테고리의 다른 글
[DirectX] HeightMap, Light (0) | 2024.01.29 |
---|---|
[DirectX] Grid, Camera (0) | 2024.01.04 |
[DirectX] World Matrix (2) | 2023.12.21 |
[DirectX] Triangle, Rectangle (0) | 2023.12.21 |
[DirectX] Vertex (1) | 2023.12.20 |