У меня есть сфальсифицированная (двуногая) и анимированная модель в 3D Studio Max, которую я экспортировал в виде файла .x.
Когда я использую его, анимация запускается нормально, однако я пытался заставить саму модель наклониться и повернуться от бедра, но у меня возникают трудности с поиском того, где в иерархии костей мне следует применять матрицы вращения.
В 3D Studio Max есть объект bipe на модели Bip01, когда я выбираю и вращаю его, каскады вращения на всех костях выше бедра, поэтому я предположил, что применение матриц вращения к одному и тому же D3DXFRAME (с тем же именем , Bip01) будет иметь тот же эффект, но это не так. Происходит то, что эффект в конечном итоге применяется ко всему в иерархии костей, поэтому применение преобразований к Bip01 похоже на применение его к кости маршрута (что может быть, поскольку я не уверен, как отличить одну кость от другой).
Вот код, где обновляются преобразования кадров, и я добавил немного кода, пытающегося применить преобразование матрицы к Bip01, я не уверен, есть ли какой-либо другой соответствующий код, который я могу показать ... (ротация значение - это просто случайное значение, которое я добавил)
void CAnimInstance::UpdateFrames( MultiAnimFrame* pFrame, D3DXMATRIX* pmxBase )
{
assert( pFrame != NULL );
assert( pmxBase != NULL );
if (strcmp (pFrame-> Name, "Bip01") == 0)
{
D3DXMATRIX rot; D3DXMatrixRotationY (& rot, 3.141);
D3DXMatrixMultiply (& pFrame-> TransformationMatrix,
& PFrame-> TransformationMatrix,
и гниль);
} * +1010 *
D3DXMatrixMultiply( &pFrame->TransformationMatrix,
&pFrame->TransformationMatrix,
pmxBase );
// transform siblings by the same matrix
if( pFrame->pFrameSibling )
UpdateFrames( ( MultiAnimFrame* )pFrame->pFrameSibling, pmxBase );
// transform children by the transformed matrix - hierarchical transformation
if( pFrame->pFrameFirstChild )
{
UpdateFrames( ( MultiAnimFrame* )pFrame->pFrameFirstChild,
&pFrame->TransformationMatrix );
}
}
* То, что я должен сделать, - это найти все дочерние кадры для Bip01 и применить к ним преобразование, но как мне это сделать?