Загрузка мешей, используя анализатор .X

Как я и обещал, пришло время узнать, как присоединить функции загрузки мешей к классу анализатора .X. Т. к. мы будем непосредственно получать доступ к объектам мешей, необходимо использовать функцию D3DXLoadMeshFromXof для загрузки данных меша. Это означает, что вам необходимо анализировать каждый объект, ища при этом объекты "Mesh". Начнем с наследования класса анализатора, с которым будем работать.

class cXMeshParser : public cXParser {

public: ID3DXMesh *m_Mesh;

public :

cXMeshParser() { m_Mesh = NULL; }

~cXMeshParser() { if(m_Mesh) m_Mesh->Release(); }

BOOL ParseObject(IDirectXFileData *pDataObj, \ IDirectXFileData *pParentDataObj, \ DWORD Depth, \

void **Data, BOOL Reference);

};

Как вы можете видеть из объявления класса, я объявляю только один объект меша. Если вы хотите больше, вам необходимо создать связанный список (или какой-либо другой список) для хранения объектов меша. Я оставляю это вам, потому что мне просто необходимо продемонстрировать использование функции D3DXLoad-MeshFromXof.

Перезагружая функцию ParseObject, позволим ей искать объекты Mesh.

BOOL cXMeshParser::ParseObject( \

IDirectXFileData *pDataObj, \ IDirectXFileData *pParentDataObj, \ DWORD Depth, \ void **Data, BOOL Reference)

{

/ / Пропустить ссылочные объекты

if(Reference == TRUE) return TRUE;

// Убедиться, что анализируемый объект - Mesh if(*GetObjectGUID(pDataObj) == D3DRM_TIDMesh) {

// это меж, использовать D3DXLoadMeshFromXof для его загрузки

ID3DXBuffer *Materials;

DWORD NumMaterials;

D3DXLoadMeshFromXof(pDataObj, 0, pDevice, NULL, \ &Materials, NULL, &NumMaterials, &m_Mesh);

// Закончить обработку информации о материалах

// Вернуть FALSE для завершения анализирования return FALSE; }

// Анализировать дочерние объекты

return ParseChildObjects(pDataObj,Depth,Data,Reference) ;

}

Вот и все! Используя один быстрый вызов, вы загружаете меш из объекта Mesh! Если вы думаете, что это круто, у меня есть для вас кое-что новое - скелетные меши. Правильно, те изящные скелетные меши, о которых вы читали в главе 2, также легко использовать, как и стандартные меши. Читайте далее, чтобы узнать, как загружать скелетные меши из .X файлов.

Загрузка мешей с использованием D3DX || Оглавление || Загрузка скелетных мешей