보간을 위해 SRT를 저장해놓는 것이 좋음
DirectX에서 SRT 분리 함수 지원(DirectX::XMMatrixDecompose())
DirectX에서 보간을 위한 함수 지원(DirectX::XMVectorLerp(), DirectX::XMQuaternionSlerp())
보간 역시 부모의 보간과 자식의 보간을 따로 처리해야 한다
간단하게 설명하자면 Bone에 Skin을 까는 행위
자세하게 설명하자면, Rigid Body는 Matrix변환에 의해 그 형태가 변하지 않기 때문에, Bone계층 구조를 통해 나타낸 Object의 경우 관절부 사이에 각진 Object 표현이 발생
이를 통해 Rigid Body한 Mesh도 그 형태에 변형이 가능
이 외에 가상의 Bone을 통해 Character의 호흡같은 연출도 가능할 듯
일반적으로 최대 4개의 Bone에 대해서만 영향을 받도록 설정
Mesh가 Skinning된다면 Normal 역시 추가적인 계산 필요
DirectX의 Buffer는 Shader에 넘길 때 한번에 정보를 넘기기 때문에, 다수의 Buffer로 구성되어있어도 1개의 Shader Struct을 구성하는게 가능
D3D11_INPUT_ELEMENT_DESC ied[] =
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0,0,D3D11_INPUT_PER_VERTEX_DATA, 0},
{ "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0,12,D3D11_INPUT_PER_VERTEX_DATA, 0},
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0,24,D3D11_INPUT_PER_VERTEX_DATA, 0},
{ "TEXTURE", 0, DXGI_FORMAT_R32G32_FLOAT, 0,40,D3D11_INPUT_PER_VERTEX_DATA, 0},
// 다른 Buffer로 구성될 경우 4번째 인수로 Slot정보 구분 필수
// 동일한 이름은 사용 가능하지만 2번째 매개변수로 구분 필요
{ "INDEX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1,0,D3D11_INPUT_PER_VERTEX_DATA, 0},
{ "WEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1,16,D3D11_INPUT_PER_VERTEX_DATA, 0},
};
// 이 방법으로 다수의 Buffer를 한번에 넘기거나 따로따로 넘길 수 있음
// 이 방식을 통해 다수의 Buffer로 Mix가 가능
UINT stride[2] = { sizeof(PNCT_VERTEX), sizeof(IW_VERTEX) }; // 정점1개의 바이트용량
UINT offset[2] = { 0, 0 }; // 정점버퍼에서 출발지점(바이트)
//SLOT(레지스터리)
ID3D11Buffer* buffer[2] = { m_pSubVB[iSubObj],m_pSubVB_IW[iSubObj] };
m_pImmediateContext->IASetVertexBuffers(0, 2, buffer, stride, offset);