ЖУРНАЛ ХАКЕР

Суровая правда жизни о Direct3D

Спецвыпуск Хакер, номер #004, стр. 004-098-6


Теперь будем пробовать создавать девайсы. Схема наших действий такова: 1. Пробуем создать TnLHal девайс. Если проваливаем - идем на п.2, иначе идем на п.4. 2. Пробуем создать HAL девайс. Если проваливаем - идем на п.3, иначе идем на п.4. 3. Пробуем создать RGB девайс. Если проваливаем - сообщаем об ошибке и выходим. 4. Продолжаем... Из-за этой схемы действий кусок создания девайсов будет выглядеть довольно забавно, но это в листинге. После этого надо создать вупорт - ViewPort. Это обыкновенный прямоугольник, в котором будет видно зарендеренное изображение. Описывается он структурой D3DVIEWPORT7. Создай переменную этого типа, например, vp. Присвой ей значение {0, 0, 1280, 1024, 0.0f, 1.0f}. Первые две цифры - координаты левого верхнего угла, вторые - правого нижнего. Последние - координаты по Z (на хрен не нужны). Чтобы применить эти значения, надо вызвать метод SetViewport интерфейса IDirect3DDevice7 (теперь под методами ты будешь понимать методы именно этого интерфейса - дальше пойдут только они (за небольшим исключением - будет специально оговорено), единственным параметром которого будет указатель на этот самый D3DVIEWPORT (то есть мы впишем туда &vp). Теперь любуйся листингом.

Листинг №5 - main.cpp, инициализация 3D девайсов

hr = lpD3D->CreateDevice (IID_IDirect3DTnLHalDevice, //Полная акселерация

lpBB,

&lpD3DD);

if(FAILED(hr)) //Проверка на ошибки

{

hr = lpD3D->CreateDevice (IID_IDirect3DHALDevice,

lpBB,

&lpD3DD); //По возможности акселим

if(FAILED(hr))

{

hr = lpD3D->CreateDevice (IID_IDirect3DRGBDevice,

lpBB,

&lpD3DD); // Software Rendering

if(FAILED(hr)) return hr;

}

}

D3DVIEWPORT7 vp = { 0, 0, 1280, 1024, 0.0f, 1.0f };

hr = lpD3DD->SetViewport(&vp); //Создаем так называемый ViewPort -

прямоугольник на серфайсе, в который будем рисовать

if(FAILED(hr))

return hr;

Конец листинга 5.

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

Назад на стр. 004-098-5  Содержание  Вперед на стр. 004-098-7