본문 바로가기

그래픽스

[그래픽스] Texturing

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)에 따라 텍스쳐가 표현되는 방식이 달라진다.