Texture2D g_texture0 : register(t0);
SamplerState g_sampler : register(s0);
텍스쳐를 원하는 위치에 가져오는 것을 샘플링이라고 한다.
물체에 텍스쳐를 입히기 위해서 쉐이더 코드에 위와 같이 전역변수 texture과 sampler이 필요하다.
texture을 받을 때는 레지스터로 t, sampler을 받을 때는 레지스터로 s를 받는다.
g_texture0.Sample(g_sampler, input.texcoord)
그리고 위 코드로 input의 texcoord에 texture을 가져올 수 있다.
텍스쳐는 CreateTexture2D로 만들고 쉐이더가 텍스쳐를 사용할 수 있게 CreateShaderResourceView로 만든다.
텍스쳐를 쉐이더의 RenderTargetView로 사용할 수도 있고 그 RenderTargetView를
다른 쉐이더의 입력으로 넣어줄 수 있다. 그럴 때에는 Texture을 ShaderResourceView로 넣어줘야 한다.
그리고 m_device->CreateSamplerState(&sampDesc, m_samplerState.GetAddressOf());로 샘플러도 만들어준다.
------- 여기까지 Initialize이고 이제 Render이다.
ID3D11ShaderResourceView *pixelResources[1] = {m_textureResourceView.Get()};
m_context->PSSetShaderResources(0, 1, pixelResources);
m_context->PSSetSamplers(0, 1, m_samplerState.GetAddressOf());
Pixel Shader에 ShaderResourceView와 Sampler을 세팅한다.
ShaderResourceView는 여러개를 넣을 수 있으므로 배열의 형태가 될 수 있다.
Sampler의 Address 모드 (Wrap, Clamp, Mirror)에 따라 텍스쳐가 표현되는 방식이 달라진다.
'그래픽스' 카테고리의 다른 글
| [그래픽스] Picking (렌더타겟 2개 이용, GPU->CPU로 데이터 복사) (0) | 2023.07.19 |
|---|---|
| [그래픽스] 후처리 - 이미지 필터 (0) | 2023.07.19 |
| [그래픽스] 투영 변환에서 z값을 나누는 시점 (0) | 2023.07.18 |
| [그래픽스] 렌더링 파이프라인 (0) | 2023.07.18 |
| [그래픽스] DirectX 초기화 (0) | 2023.07.18 |