TB>Когда пишешь lpDevice->SetTransform(D3DTS_WORLDMATRIX(nBone),&m_nBones[nPose][nBone]);ты только устанавливаешь трансформацию над объектом который будет рисоваться далее, над мешом, а кость это не меш. Все вершины твоего объекта должны содержать информацию о костях к которым они принадлежат и весах. Каждую вершину ты должен трансформировать... вобщем умножить на матрицу кости и на вес этой кости для этой вершины. Посмотри Skinned Mesh в DirectXSDK
Стоп-стоп-стоп! Я же юзаю indexed vertex blending, информация о костях и весах есть в FVF:
typedef struct
{
float x, y, z;
float weights[3]; // Веса (первый, второй, третьий, 1.0f-остальные)
BYTE indices[4]; // Индексы матриц
float nx, ny, nz;
float tu, tv;
}SKIN_VERTEX;
#define D3DFVF_SKINVERTEX (D3DFVF_XYZB4 | D3DFVF_LASTBETA_UBYTE4 |D3DFVF_NORMAL | D3DFVF_TEX1)
SetTransform(D3DTS_WORLDMATRIX(nBone)...) как раз позволяет установить матрицу в палитре из 256 матриц,
на которые и ссылаются indices в каждой вершине. Короче, на каждую вершину может быть 4 кости из
256.
Потом остается сделать только так

SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, TRUE);
А пример skinned mesh в dx sdk — один из самых мерзких и нечитабельных примеров, имхо.