Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.doc
Скачиваний:
10
Добавлен:
20.06.2014
Размер:
304.64 Кб
Скачать

5.3.1.Используемые функции DirectX 9

D3dObject -> CreateDevice ( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AppWnd, 3DCREATE_HARDWARE_

Vertexprocessing, &d3dpp, &d3dDevice );

Аргументы CreateDevice:

1) число - номер видеоадаптера в системе (D3DADAPTER_DEFAULT - по умолчанию);

2) желаемый тип 3d-устройства;

3) дескриптор окна (HWND), в которое выводится графическая информация;

4) дополнительные опции, управляющие созданием модели устройства;

5) адрес корректно заполненной структуры D3DPRESENT_PARAMETERS;

6) адрес переменной, в которую будет помещен указатель для доступа к созданному устройству.

D3dDevice -> Clear ( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(100, 100, 100), 1, 0 );

Эта функция предназначена для заполнения некоторым цветом набора прямоугольников на видимом окне. Так, ее первый аргумент есть число прямоугольников, а второй - указатель на массив прямоугольников, в котором должно быть указанное число элементов; в нашем случае оба аргумента нули - значит, заполняется вся видимая область. Флаг D3DCLEAR_TARGET указывает, что нужно заливать цветом, заданным следующим аргументом.

D3DXCreateMeshFVF ( numVertices/3, numVertices, D3DXMESH_SYSTEMMEM, CUSTOM_FVF, D3dDevice, &MeshTmp );

Аргументы D3DXCreateMeshFVF:

1) количество ячеек;

2) количество вершин;

3) опции создания - в нашем случае буферы создаются в системной памяти (RAM);

4) код формата (FVF) вершин;

5) устройство отображения, с которым ассоциирована данная сетка;

6) возвращаемый адрес интерфейса созданного объекта.

Объекты ID3DXMesh самостоятельно (на основе переданного им при создании кода FVF) ведут буферы вершин (vertex buffers). Мы должны заблокировать буфер вершин, получить указатель на его начало, занести туда информацию об узлах сетки, затем разблокировать буфер:

MeshTmp -> LockVertexBuffer(0, (void**)&p);

MeshTmp -> UnlockVertexBuffer();

D3DXWeldVertices ( MeshTmp, 0, 0, NULL, adjArray, NULL, NULL );

Аргументы D3DXWeldVertices:

1) обрабатываемая сетка;

2) флаги и опции; у нас 0 - ничего специального;

3) адрес структуры D3DXWELDEPSILONS с информацией о допусках при сравнении;

4) адрес массива с информацией о соседях каждой ячейки; если здесь NULL, будет вызвана специальная вспомогательная функция, которая эту информацию сгенерирует;

5) опять адрес массива с информацией о соседях каждой ячейки - на этот раз результирующего, для оптимизированной «спаянной» сетки;

6) и 7) указатели на буферы с новыми индексами ячеек и вершин; NULL - эта информация не интересует.

MeshTmp -> OptimizeInplace ( D3DXMESHOPT_COMPACT, adjArray, NULL, NULL, NULL );

флаг D3DXMESHOPT_COMPACT соответствует удалению неиспользуемых вершин. Нули в аргументах, как и в случае D3DXWeldVertices, означают, что возвращаемая информация о перестроенных индексах не требуется.

MeshTmp -> CloneMeshFVF ( D3DXMESH_WRITEONLY, CUSTOM_FVF, D3dDevice, &Mesh );

Копирование Mesh в быструю память только для записи:

MeshTmp -> Release(); - освобождение временного объекта.

D3DXMatrixTranslation(&p, x0, y0, z0); - создание матрицы сдвига.

D3DXMatrixRotationYawPitchRoll( &rotGen, rotY, rotX, rotZ ); - создание матрицы, определяющей поворот сцены.

D3DXMatrixLookAtLH( &matView, &eye, &at, &up );

Преобразование обзора определяет позицию и направление камеры (глаза):

Здесь задается положение наблюдателя в пространстве (eye), точка сцены, на которую направлен взгляд (at) и вектор направления вверх (up). Функция D3DXMatrixLookAtLH формирует матрицу преобразования обзора для стандартной в Direct3D левой декартовой системы координат.

D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1, 2, 5 );

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