Суровая правда жизни о 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 уже рендереспособными. Все эти цифры я взял от балды - они не имеют никакого принципиального смысла. И замечу, что в присваивании значений второй половины массива нарушен порядок - это все проделки паршивого задания вершин по часовой стрелке. В общем - зри в листинг.