Т. к. точки одежды изменили свое положение, необходимо перестроить начальный меш так, чтобы изменения были заметны. Т. к. вы уже загрузили исходный меш из .X файла в объект ГОЗБХМевп, все, что остается сделать, это заблокировать буфер вершин меша, сохранить в него координаты точек и пересчитать нормали (если исходный меш их использует).
Еще раз создадим универсальную структуру, содержащую только вектор. Этот вектор используется для получения доступа к данным координат вершин меша.
typedef struct {
D3DXVECTOR3 vecPos; } sVertex;
После этого необходимо просто заблокировать буфер вершин меша и просмотреть все точки одежды (опять!), сохраняя их координаты.
// Заблокировать буфер вершин меша BYTE *pVertices;
pClothMesh->LockVertexBuffer(0, (BYTE**)&pVertices);
for(DWORD i=0;i<NumPoints;i++) {
// Преобразовать указатель на вершину sVertex *pVertex = (sVertex*)pVertices;
// Сохранить координаты вершины *pVertex = ClothPoints[i].m_vecPos;
// Перейти к следующей вершине pVertices += VertexStride;
}
// Разблокировать буфер вершин pClothMesh->UnlockVertexBuffer();
После того как вы воссоздали меш, вы можете визуализировать его обычным образом, просмотрев список материалов меша и используя функцию ID3DXMesh::DrawSubset для визуализации каждого поднабора. Если вы хотите повторно использовать исходный меш, например, для сброса имитации одежды, необходимо восстановить исходные координаты его вершин.
⇐Приложение сил для создания движения || Оглавление || Восстановление исходного меша⇒