перемещается мировая матрица а не вершины объекта! Думаю стоит не сэмплы смотреть, а почитать умную книжку, и все встанет на свои места.
IDirect3DVertexBuffer9* vb = 0;
Mesh->GetVertexBuffer(&vb);
потом делать буферу lock, тебе нужно будет вытаскивать в структуру FVF, ее тоже из D3DXMESH можно получить
IDirect3DIndexBuffer9* ib = 0;
Mesh->GetIndexBuffer(&ib);
по перемещениям
D3DXMATRIX cObject::GetTransformMatrix()
{
D3DXMATRIX pos,rx,ry,rz,scal;
D3DXMatrixScaling(&scal,scale[0],scale[1],scale[2]);
//D3DXMatrixRotationYawPitchRoll(&pos,rotation[1],rotation[0],rotation[2]);
D3DXMatrixRotationX(&rx,utils::RadToDeg(rotation[0]));
D3DXMatrixRotationY(&ry,utils::RadToDeg(rotation[1]));
D3DXMatrixRotationZ(&rz, utils::RadToDeg(rotation[2]));
D3DXMatrixTranslation(&pos,position[0],position[1],position[2]);
return scal * rx * ry * rz * pos;
}
void cObject::SetWorldMatrix()
{
D3DXMATRIX mat = GetTransformMatrix();//получаем матрицу тек объекта
pDevice->SetTransform(D3DTS_WORLD, &mat); //делаем текущей
}
Для колизий используй bullet кпримеру.
а вообще почитай
http://www.netlib.narod.ru/library/book0032/ch10_01.htm книга супер, сам читал