Использование мастера DirectX AppWizard очень упрощает запуск и подготовку Direct3D к использованию. Точнее говоря, мастер не только инициализирует Direct3D. Он инициализирует и все остальные компоненты DirectX.
Последовательность работы с мастером DirectX AppWizard в разных версиях Visual Studio несколько различна. Чтобы помочь вам начать, я опишу работу с ним и в версии 6, и в версии 7.
ИСПОЛЬЗОВАНИЕ МАСТЕРА DIRECTX APPWIZARD В VISUAL STUDIO 6
Вот как использовать мастер DirectX AppWizard в Visual Studio 6:
1. В меню File выберите пункт New. Visual Studio отобразит окно New. Если вкладка Projects не открыта, откройте ее с помощью мыши.
2. На странице New Projects показан список проектов, которые можно создать в Visual Studio. Выберите в этом списке пункт DirectX AppWizard. more…
Archive for » December, 2007 «
В Direct3D области памяти, соответствующие по размеру экрану, называются поверхностями (surfaces). Выполняя рисование с помощью Direct3D, вы на самом деле рисуете на поверхности неактивной видеостраницы (back buffer), а монитор в это время отображает содержимое активной видеостраницы (front buffer). Неактивная страница не отображается; это просто область памяти, имеющая тот же размер и ту же организацию, что и активная видеостраница. Когда вашей программе нужно изменить изображение, она записывает новые данные в неактивную видеостраницу. Когда процесс рисования заканчивается, мы просто меняем указатели местами, и поверхность, бывшая неактивной видеостраницей, становится активной, а бывшая активной - становится неактивной. Этот процесс называется переключением видеостраниц (page flipping) - (см. рис. 2.2).
Использование переключения страниц решает несколько проблем. Во-первых, если рисовать непосредственно на more…
Related posts
Это не слишком сложно. Нужно просто прорисовывать первыми самые дальние объекты, а затем прорисовывать более близкие. Это хорошо получается, если рисовать на неактивной видеостранице и переключать видеостраницы, закончив рисовать, но если рисовать на активной видеостранице, то иногда объекты заднего плана могут оказываться нарисованными поверх объектов переднего плана.
Теперь мы готовы использовать интерфейс IDirect3D9, чтобы создать еще один объект - устройство (device). Объект Direct3D был довольно абстрактен, но устройство - это гораздо более конкретная вещь, соответствующая аппаратному устройству: видеокарте. Все рисование, которое вы хотите выполнять с помощью этой графической карты, будет выполняться через создаваемый сейчас интерфейс. Если вы захотите использовать вторую видеокарту (это делают немногие игры), вам понадобится второе устройство. more…
Tags: Инициализация, ПОВЕРХНОСТИ, УСТРОЙСТВАRelated posts
Все, что отображается на дисплее, копируется непосредственно из области памяти, называемой текущей видеостраницей (front buffer). Эта область может располагаться в основной оперативной памяти компьютера, но чаще она находится в памяти видеокарты. Когда программа (или Windows) желает отобразить на экране что-то новое, она изменяет содержимое этой области (буфера), и графическая карта пересылает это содержимое монитору. Размер буфера зависит от разрешения монитора и используемой глубины цвета.
Разрешения, которые можно использовать, ограничиваются монитором, видеокартой и Windows. Если вы хотите использовать какое-то конкретное разрешение, его должны поддерживать и монитор, и видеокарта, и Windows. Если вы играли в компьютерные игры или просто возились с настройками дисплея в Control Panel, вы, вероятно, знакомы с самыми распространенными разрешениями, например, 640 х 480, 800 X 600, 1024 х 768, 1280 х 1024 и 1600 х 1200.
Кроме разрешения дисплея, важна еще глубина цвета. Глубина цвета — это количество памяти, отвечающее одному пикселю на дисплее. Большая часть этой памяти предназначена для хранения цвета пикселя.Например, если more…
Related posts
Теперь, получив интерфейс объекта, можно воспользоваться его методами. Для начала узнаем, какой сейчас используется режим дисплея:
// Структура для хранения информации о текущем режиме дисплея D3DDISPLAYM0DE currentDisplay;
// Получаем информацию о текущем режиме дисплея if ( FAILED( g_pD3D->
GetAdapterDisplayMode( D3DADAPTER_DEFAULT, ScurrentDisplay ) )
) {return E_FAIL;}
Подсказка
К методу интерфейса можно обратиться, указав имя интерфейса, за которым следуют два двоеточия (::), а затем имя нужного метода. Поэтому, если я пишу IDirect3D9: :GetAdapterDisplayMode (), я обращаюсь к методу GetAdapterDisplayMode () интерфейса IDirect3D9._
Метод IDirect3D9::GetAdapterDisplayMode() принимает два параметра. Первый — используемый адаптер. Значение D3DADAPTER_ DEFAULT соответствует основному адаптеру.
Второй параметр - указатель на структуру, в которой хранится информация о режиме дисплея. Посмотрим на определение этой структуры:
typedef struct _D3DDXSPLAYMODE {
UINT Width;
UINT Height;
UINT RefreshRate;
D3DFORMAT Format; } D3DDISPLAYMODE;
Смысл первых трех параметров вполне очевиден. Это ширина и высота изображения на дисплее в пикселях, например, 1280 х 1024, и частота обновления кадров, например, 85 Гц.
Последний параметр - формат поверхности. Он показывает, как воспринимается информация о каждом пикселе. Есть много разных форматов, из которых только несколько подходят для дисплеев и видеостраниц (мы вскоре разберемся, что такое видеостраницы). В таблице 2.1 перечислены эти типы.
Related posts
Я помещу собственно инициализацию DirectX в новую функцию, названную Direct3DInit (). Эта функция будет вызываться из функции Gamelnit ().
Объекты Direct3D можно создавать с помощью функции Direct3DC-reate9 (). Я назову возвращаемое значение этой функции его официальным именем - IDirect3D9. Здесь / означает интерфейс (interface).
// Получаем указатель на IDirect3D9
if (NULL == ( g_j>D3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL;
Функции Direct3DCreate9 () всегда нужно передавать значение D3D_SDK_VERSION. Других корректных значений нет. D3D_SDK_ VERSION обновляется при обновлении DirectX. Передача этого параметра сообщает программе, с какой версией DirectX ей нужно работать.
Функция возвращает NULL, если ей не удается создать объект Di-rect3D. Если она возвращает NULL, функция Gamelnit () возвращает значение E_FAIL. more…
Related posts
1. Объявление переменной, в которой будет храниться указатель на интерфейс объекта. Сначала этой переменной присваивается значение NULL:
LPDIRECT3D g_pD3D = NULL;
2. Вызов функции создания объекта. Эта функция возвращает указатель на интерфейс объекта, который можно хранить в созданной в шаге 1 переменной. Если функции не удается создать объект, она возвращает значение NULL:
g_j>D3D = Direct3DCreate9( D3D_SDK_VERSION );
3. Теперь, когда у нас есть указатель на интерфейс, можно использовать его для вызова методов. Например:
g_pD3D-X3etAdapterDisplayMode ( D3DADAPTER_DEFAULT, Scurrentdisplay);
4. Завершив работу с СОМ-интерфейсами, нужно освобождать их в порядке, обратном порядку их инициализации. more…
Related posts
Компоненты DirectX - это СОМ-объекты. СОМ-объекты реализуются в виде библиотек DLL (Dynamic Link Library - библиотека динамической компоновки). Когда вы играете в игру, использующую DirectX, эти библиотеки загружаются, и игра запрашивает из них нужные ей интерфейсы. Методы из этих интерфейсов и выполняют все операции рисования, работы со звуком и обработки ввода.
Написание собственных СОМ-объектов возможно и, вероятно, полезно, но большинству программистов, пишущих игры, достаточно уметь использовать эти объекты, связанные с DirectX. На самом деле мы практически не будем иметь дела с СОМ-объектами DirectX. Microsoft знала, что СОМ-объекты в DirectX должны присутствовать в минимальном количестве, чтобы DirectX получил распространение, и спрятала большую часть взаимодействия с СОМ в пару функций, more…
