Как я и обещал, пришло время узнать, как присоединить функции загрузки мешей к классу анализатора .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 || Оглавление || Загрузка скелетных мешей⇒