
|
|
Использование файлов .Х формата
Все кому интересна данная тема подарок к празднику (к сожалению он уже прошел). Следующий урок посвящен основам использование (т.е. загрузке и отрисовке) трехмерных моделей из .x файлов. В файлах данного формата сохраняются трехмерные объекты, их материалы, нормали, описание текстур, анимация, и т.д. Создать их можно практически в любом современном редакторе трехмерных объектов. Итак, начнем... Для начала создадим следующие переменные : LPD3DXMESH p_d3dx_mesh = NULL; int iSizeOfMeshVertex=0; --- первая будет представлять сам трехмерный
объект Далее создадим функцию для загрузки объекта из файла следующего вида : данная функция будет у нас загружать данные их файла. В ней использована функция D3DXLoadMeshFromX() предназначенная как раз для данной цели. Как параметры ей предаются : --- имя файла для использования Затем мы вычисляем необходимый объем памяти для хранения нашего объекта (в соответствии с тем, какие флаги у нас имеются). Следующим шагом мы извлекаем указатели на буфер вершин и буфер индексов данного объекта, они нам понадобятся при отрисовке. Функция для загрузки объектов у нас теперь имеется, следовательно его уже можно загружать из файла:
LoadMesh ("bigtree.x");
Последний шаг (точнее предпоследний, последний - уничтожение объекта из памяти) это отрисовка. Мы уже имеем в нашей программе загруженный ранее объект, следовательно, теперь мы можем рисовать его. Что мы и проделаем : здесь дана вся последовательность отрисовки. Первые две строчки вам уже знакомы; в третьей строке происходит установка источника данных, причем тут мы используем подсчитанный ранее объем памяти занимаемой одной веоршиной объекта; в четвертой строке - мы устанавливаем источник индексов; потом материал; и собственно сама отрисовка - используется функция DrawIndexedPrimitive(), она предназначена для отрисовки индексированных примитивов. А вот теперь и последний шаг - уничтожение объекта и освобождение занимаемого им объема памяти : _RELEASE_ (p_VertexBuffer); _RELEASE_ (p_IndexBuffer); _RELEASE_ (p_d3d_Device); _RELEASE_ (p_d3d); Вот теперь шаги кончились, и следовательно урок окончен. После того как вы проделаете все здесь написанное, вы должны получить картинку примерно следующего вида:
Теперь все.. Пока всем.. |
![]() |