Re[2]: Экспорт skinned mesh из макса: хелп!
От: Manstopper  
Дата: 14.05.03 09:42
Оценка:
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 — один из самых мерзких и нечитабельных примеров, имхо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.