Billboards
카테고리: Graphics
태그: DirectX
홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.
🐥 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 |
---|---|
댓글 남기기