Воссоздание и визуализация меша одежды

Т. к. точки одежды изменили свое положение, необходимо перестроить начальный меш так, чтобы изменения были заметны. Т. к. вы уже загрузили исходный меш из .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 для визуализации каждого поднабора. Если вы хотите повторно использовать исходный меш, например, для сброса имитации одежды, необходимо восстановить исходные координаты его вершин.

Приложение сил для создания движения || Оглавление || Восстановление исходного меша