DOSUG CZ– розовая кнопка на сайте!
Logo

Учимся работать с DelphiX

Краткий обзор DirectX

Говоря техническим языком, DirectX - набор объектов COM (Component Object Model), которые реализуют интерфейсы для облегчения работы с видеоаппаратурой, звуком, межкомпьютерными соединениями и некоторыми системными сервисами (см.рис.1).

DirectX был создан для решения проблемы совместимости аппаратуры, пополняющейся все новыми образцами с новыми возможностями и функциями, и программ, этой аппаратурой управляющих. Также применение DirectX с аппаратурой, имеющей функции аппаратного ускорения (3Dfx, NVidia и подобные) позволяет разгрузить основной процессор.

DirectX состоит из 7 основных компонент:

  • DirectDraw - позволяет напрямую работать с видеопамятью и аппаратными функциями оборудования, при этом сохраняя совместимость с Windows-приложениями.
  • DirectInput - интерфейс для устройств ввода (мышь, клавиатура, джойстик и т.д.)
  • DirectPlay - интерфейс для многопользовательских приложений (TCP/IP, Direct Dial, локальное подключение)
  • DirectSound - интерфейс для звуковой аппаратуры (WAV, MIDI и др.)
  • DirectSound3D - позвляет позиционировать звуковые источники в любой точке трехмерного пространства, создавая таким образом реальный объемный звук.
  • Direct3D - интерфейс к 3D - аппаратуре

Все эти компоненты спроектированы таким образом, чтобы дать програмисту прямой доступ к аппаратуре.

Терминология

Перед началом работы с DirectX необходимо остановиться на терминологии.

Поверхность (surface) - участок видеопамяти, который используется для хранения различных картинок. Все видеобуферы ссылаются на поверхности. Поверхность, которая отображается на экране в текущий момент называется основной (primary) поверхностью. Эта поверхность занимает столько памяти, сколько нужно для текущего разрешения и глубины цвета. Так, если установлен видеорежим 640 x 480 x 256 цветов (8 bpp), тогда основная поверхность будет занимать 307200 байт видеопамяти. Обычно вам нужна еще одна поверхность такого же размера, что и основная, используемая для флиппинга (что это такое будет объяснено чуть позже). Это значит, что нужно 614400 байт видеопамяти просто чтобы начать работать, не загружая никаких картинок. Если количества видеопамяти не хватает, поверхности будут создаваться в системной памяти, теряя преимущества аппаратного ускорения. В настоящий момент вам необходима видеокарта с 2MB видеопамяти - это абсолютный минимум для простых игр.

Двойная буферизация (double buffering) - техника, применяемая для получения быстрой, плавной анимации. Обычно используется дополнительный буфер, где создается сцена, которая затем отображается на экране.

Анимация с флиппингом страниц (page flipping animation) - для понимания этой техники вам достаточно нарисовать что-нибудь в блокноте и быстро пролистать страницы. При этом получится изменяющаяся картинка. В нашем случае сцена создается копированием картинок и спрайтов на поверхность (буфер), которая затем отображается на экране. Флиппинг - очень быстрая операция из-за того, что реально не происходит копирования больших объемов информации. При флиппинге происходит изменение одного регистра видеокарты, который содержит адрес участка памяти, отображающегося в текущий момент. В основном флиппинг состоит из 3-х шагов:
1. Создание сцены в буфере.
2. Переключение буфера для отображения, при этом поверхность, которая отображалась до этого становится буфером.
3. Повторяем с шага 1.

Кадры в секунду (frames per second) - обычно записывается как FPS, и обозначает количество кадров анимации, необходимое для получения плавного реального движения. Обычно для игр достаточно 24-25 FPS для получения приемлемых результатов (хотя для некоторых игр это значение может быть еще меньше).

Эффект разрывания экрана (tearing) - Большинство мониторов обновляют экран с частотой примерно 70 раз/сек (70 Гц) сверху вниз. Проблема возникает когда вы пытаетесь отобразить новую картинку где-то в середине процесса обновления экрана. При этом верхняя половина экрана отображает старую картинку, а нижняя - новую. Во время существования DOS для предотвращения этого эффекта вам нужно было бы синхронизироваться с вертикальной разверткой. DirectX освобождает вас от этой процедуры.

Картинки (битмапы) и спрайты - спрайты отличаются от битмапов тем, что они имеют прозрачные области. Термин "спрайт" также используется для анимированных изображений в играх. Обычно спрайт состоит из нескольких фреймов (кадров), как в ледующем примере:

Отметим, что каждый фрейм отображает определенный угол поворота объекта. Если показывать эти картинки одна за другой, то получится что-то тип этого:

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

Клиппинг (clipping) - эта техника применяется для того, чтобы приложение смогло рисовать только в отведенный ему прямоугольник на экране. Если клиппинг не применяется, приложение может рисовать на всем экране. Это прекрасно работает если ваше приложение полноэкранное, но если оно оконное - клиппинг должен применяться обязательно.

Теория цвета - цвет в Windows обычно представляется моделью RGB (красный, зеленый, синий). Используя эти три основных цвета позволяет получить все мыслимые оттенки комбинацией основных. Обычно цвет хранится в виде 3-х байтов - каждый байт представляет относительную интенсивность основного цвета (от 0 до 255 включительно).

В Delphi цвет представляется в виде класса TColor, объявленном в модуле Graphics. Вы можете определить цвет используя консттанты типа clBlue, clLime и т.п. или определяя TColor как 4-хбайтовое число, где 3 младших байта представляют RGB цвет. Так, 0x00FF0000 - синий, 0x0000FF00 - зеленый, 0х000000FF - красный, 0x00000000 - черный, 0х00FFFFFF - белый и т.д. По поводу старшего байта в помощи по VCL сказано: "Если старший байт равен $00, получаемый цвет - ближайший подходящий цвет системной палитры, если он равен $01 - берется ближайший цвет из текущей палитры, если $02 - подбирается ближайший цвет, соответствующий контексту устройства".

 
главная - о проекте - контакты - реклама на сайте
 
LBN100 Elite

SoftStudio.Ru - студия разработки программ
LBN100 Elite