Навигация
Главная
Новости
Скачать
Шаблоны сайтов
Партнеры

Графика
Adobe Photoshop

Программирование
Теория алгоритмов
Code Snippets
Все о PHP
Visual C++
WIN32 API
Delphi
ASP

Java
VBScript
CGI
VRML
PERL
HTML
XML

Сети
Cisco
IP-сети
Сетевые термины

IT
UNIX-системы
Хостинг

Операционные системы
Windows
Linux

Поисковая оптимизация
Основы SEO
Мастер-класс SEO
Анализ трафика
Google AdSense

В перерыве
Интересное
Поиск работы
Немного юмора
Материалы
Публикации


RSS / РСС
.
Минутку внимания!
вкусности; предлагаем домашний кинотеатр Sharp AN-PR1000H
Direct3dX - Использование матриц
Если вы следовали моим урокам, то вы, наверное, уже можете нарисовать треугольник. Это здорово, но мало. Теперь вы можете научиться его, например, вращать. Для этого в Direct3d существует такая штука, называемая матрицей. Когда я первый раз услышал это слово, оно ничего мне не говорило, но через некоторое время я даже научился использовать их. И вы можете научиться.

Итак, в Direct3d существуют 3 основные матрицы: видовая (View), мировая (World) и проекционная (Projection). Начнем с первой. Видовая матрица характеризует положение камеры в пространстве. Вторая – положение объекта в пространстве. Третья – угол обзора и дальность прорисовки (лучше ее задать один раз и больше не менять). Для работы с матрицами существует несколько функций:

D3DXMATRIX mat1, mat2, matres; //создание 3-х матриц
D3DXMatrixIdentity(&mat1); //обнуляет матрицу
D3DXMatrixRotationX(&mat1, angle); //создает mat1, повернутую на угол angle вокруг X
D3DXMatrixTranslation(&mat2, x1, y1, z1) //создает матрицу mat2 и помещает ее в (x1;y1;z1)
D3DXMatrixMultiply(&matres, &mat1, &mat2) //перемножает mat1 на mat2 и заносит все в matres

Перемножение – одна из основных функций. При ее использовании получившаяся матрица получается как бы комбинацие двух других. Т.е. если одна матрица была повернута, а другая – подвинута, то получившаяся матрица будет и повернута, и передвинута. Это – основные функции, больше вам пока не надо.

Теперь можно применить эти знания к, например, видовой матрице. Для этого найдите функцию Render и добавьте туда этот код (можно в самое начало, но не после рисования полигонов):

D3DXMATRIX matres;
D3DXMatrixRotationX(&matres, D3DX_PI/4);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matres);

Вот мы и задали видовую матрицу. Аналогично задается мировая матрица (только пишется D3DTS_WORLD). С проэкционной все немного сложнее:

D3DXMATRIX matres;
D3DXMatrixPerspectiveFovLH( &matres, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matres);

Это – наиболее стандартный способ задания проекционной матрицы. D3DX_PI/4 – угол обзора, 100.0f – дальность прорисовки. Теперь, когда вы можете использовать матрицы, созданим простенький пример. Вот вид функции Render() (создайте глобальную переменную count):

Render()
{
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
g_pd3dDevice->BeginScene();

D3DXMATRIX mat;
D3DXMatrixPerspectiveFovLH( &mat, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &mat);
count+=0,00001f
D3DXMatrixRotationX(&mat, count);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &mat);
D3DXMatrixIdentity(&mat)
g_pd3dDevice->SetTransform(D3DTS_WORLD, &mat);

// рисование примитивов
…
…
// рисование примитивов закончено

g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

Этот вариант функции Render будет вращфть камеру вокруг оси X. Вот и все.


Для наших любимых посетителей:
Мы рекомендуем вам ознакомиться со следующими материалами на тему:
Информация для интересующихся веб-дизайном и программированием:
Right one

Online from 2006-2008 #We are the CoDeRs! Наши статьи и новости можно свободно перепечатывать при указании обратной ссылки на источник Связь с админом