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

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

Mr_False (mr_false@mail.ru)

Здравствуй, здравствуй, мой дорогой дружок - программер. Я знаю, у тебя уже давно чешутся руки от желания написать свою 3D прогу/гамесу/фигню. Но ты не знаешь - как. Мхнда... Ты, типа, пишешь на C++. Нет?! Тяжелый случай... Ну, иди учись, здесь я тебе ничем помочь не могу... Если ты действительно пишешь на C (или уже научился - ну и шустрый же ты!), то сейчас ты будешь открывать просторы Direct3D вместе со мной ("э-э-э, я хочу сказать, ну ты можешь, если хочешь, но, если не хочешь, ты не обязана, ты просто могла бы... Да" :)). А рисовать мы будем... Треугольник, т.е. полигон (доволен?, а ты думал, я тебя заставлю сцены из анрыла рисовать с применением Environment Mapping, банального текстурирования и т.д.? А вот и кукиш. Рановато пока.). Перед тем как начать программировать эту самую графику, надо знать некоторые основы. Во-первых, это система координат. В D3D она левая. Это просто значит, что ось Z устремлена в глубь экрана, X - вправо, Y - вверх, а не то что к ней свою руку (левую) приложили коммунисты.

Фактически как это выглядит, показано на иллюстрации, но, стоит заметить, что начало координат находится в центре экрана (по умолчанию).

Во-вторых - модели освещения. В D3D их доступно две: Плоская и Гуро - она стоит по умолчанию.

Не вдаваясь в подробности, скажу лишь то, что в плоской рассчитывается цвет всего полигона сразу, тогда как в гуро рассчитывается цвет в каждой вершине. Чем это фактически отличается, видно на врезанных имагах. Первая - плоская модель. Вторая - Гуро. Еще одна инфа: она, по принципу своего действия, относится к рендерингу и освещению. Если ты задал вершины своего полигона по часовой стрелке по отношению к наблюдателю, то этот полигон будет виден (D3D не поленится его нарисовать), и наоборот. Ну и обязательно надо знать, что такое двойная буферизация. Никакого отношения к телкам и их буферам эта штука не имеет. Это просто значит, что ты, когда рендеришь, результаты своих трудов выводишь не на экран, а сначала в память, и только закончив рисовать, показываешь свое старание, попутно рисуя следующий шедевр. Сделано так умно не потому, что звучит неплохо (это тебе не хухры-мухры), а только лишь потому, что иначе экран мигает и дергается (я программил и без пресловутой буферизации - лучше бы ты не видел). Вроде все.

Творить

Для того чтобы начинать творить, надо сначала обзавестись описаниями функций и классов (в данном случае это методы и интерфейсы соответственно - Direct3D использует Component Object Model (COM), но это нам пока особо не суть важно, поэтому я не буду заострять на этом внимания - все подробно описано в SDK). "А что за SDK??" - наверняка спросишь ты. Настал черед объяснять. SDK, он же Software Development Kit - как следует из перевода, набор для создания прог. В него входит документация (именно она почему-то чаще всего и имеется ввиду под аббревиатурой SDK), заголовки, библиотеки и, реже, примеры. Оное SDK к DX'у 7 тебе и придется торжественно заполучить с сайта мелкомягких, а конкретнее с msdn.microsoft.com/directx - официального сайта разработчиков DirectX. Там в разделе DirectX Downloads ткнешь на пимпы DirectX Documentation и DirectX Headers and Libraries или что-то типа того. Но я тебе не советую жать на Download DirectX SDK - ты ведь не хочешь качать 127 метров?!

Содержание  Вперед на стр. 004-098-2

ttfb: 2.4220943450928 ms