Billboards

Date:     Updated:

카테고리:

태그:

홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.


🐥 Texture Array

vector<string> filenames = {texture1, texture2, ..};

D3D11_TEXTURE2D_DESC txtDesc;
txtDesc.ArraySize = UINT(filenames.size());
// ...

vector<D3D11_SUBRESOURCE_DATA> initData(filenames.size());
// ...

device->CreateTexture2D(&txtDesc, initData.data(), texture.GetAddressOf());

D3D11_SHADER_RESOURCE_VIEW_DESC desc;
desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
desc.Texture2DArray.Arraysize = txtDesc.ArraySize;
// ...

device->CreateShaderResourceView(texture.Get(), &desc, textureResourceView.GetAddressOf());
  • 여러개의 texture 파일 경로들 vector로 만들어주고
  • Texture2D_Description의 Arraysize 맞춰주기
  • SubResourceData를 vector로 만들어 놓고
  • Shader_ResourveView_Description의 view_dimension, arraysize 지정


// in pixel shader.hlsl
Texrture2DArray g_texArray : register(t0);
SamplerState g_sampler : register(s0);

// ...

PixelShaderOutput main(PixelShaderInput input)
{
    float3 uvw = float3(input.texCoord, float(input.primID % 5));
    float4 color = g_texArray.Sample(g_sampler, uvw);

    // ...
}
  • Shader 안에서는 Texture2DArray 타입으로 받아옴
  • 이때 Sampler는 3차원으로 사용
    • (uv coord, texture array index)


🐥 Results

2차원 texture의 방향을 view에 맞게 회전시켜 주면 3차원 오브젝트처럼 보이게 할 수 있다!

Before After
ezgif com-crop (4) ezgif com-crop (5)



맨 위로 이동하기

Graphics 카테고리 내 다른 글 보러가기

댓글 남기기