На главную страницу Написать письмо Добавить в избранное Сделать www.comprog.ru стартовой

Использование файлов .Х формата

Все кому интересна данная тема подарок к празднику (к сожалению он уже прошел). Следующий урок посвящен основам использование (т.е. загрузке и отрисовке) трехмерных моделей из .x файлов. В файлах данного формата сохраняются трехмерные объекты, их материалы, нормали, описание текстур, анимация, и т.д. Создать их можно практически в любом современном редакторе трехмерных объектов. Итак, начнем...

Для начала создадим следующие переменные :


LPD3DXMESH p_d3dx_mesh = NULL;
int iSizeOfMeshVertex=0;

--- первая будет представлять сам трехмерный объект
--- вторая - объем память, необходимый для хранения информации об данном объекте, точнее объем памяти необходимый для хранения одной вершины.

Далее создадим функцию для загрузки объекта из файла следующего вида :

данная функция будет у нас загружать данные их файла. В ней использована функция D3DXLoadMeshFromX() предназначенная как раз для данной цели. Как параметры ей предаются :

--- имя файла для использования
--- указание, где нам хранить информацию об объекте
--- указатель на устройство Direct3D8
--- 0 - пока не важно
--- 0 - пока не важно
--- 0 - пока не важно
--- и собственно куда будем загружать наш объект

Затем мы вычисляем необходимый объем памяти для хранения нашего объекта (в соответствии с тем, какие флаги у нас имеются). Следующим шагом мы извлекаем указатели на буфер вершин и буфер индексов данного объекта, они нам понадобятся при отрисовке.

Функция для загрузки объектов у нас теперь имеется, следовательно его уже можно загружать из файла:


	LoadMesh ("bigtree.x");

Последний шаг (точнее предпоследний, последний - уничтожение объекта из памяти) это отрисовка. Мы уже имеем в нашей программе загруженный ранее объект, следовательно, теперь мы можем рисовать его. Что мы и проделаем :

здесь дана вся последовательность отрисовки. Первые две строчки вам уже знакомы; в третьей строке происходит установка источника данных, причем тут мы используем подсчитанный ранее объем памяти занимаемой одной веоршиной объекта; в четвертой строке - мы устанавливаем источник индексов; потом материал; и собственно сама отрисовка - используется функция DrawIndexedPrimitive(), она предназначена для отрисовки индексированных примитивов.

А вот теперь и последний шаг - уничтожение объекта и освобождение занимаемого им объема памяти :


	_RELEASE_ (p_VertexBuffer);
	_RELEASE_ (p_IndexBuffer);
	_RELEASE_ (p_d3d_Device);
	_RELEASE_ (p_d3d);

Вот теперь шаги кончились, и следовательно урок окончен. После того как вы проделаете все здесь написанное, вы должны получить картинку примерно следующего вида:

Теперь все.. Пока всем..

  Поиск по сайту
  
Яндекс цитирования