Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
Sound and Multimedia [16]
Component Packs [4]
Data Base [1]
MySQL InterBase ...
3D Graphics [3]
Misc [5]

Наш опрос
Оцените мой сайт
Всего ответов: 30

Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0

Форма входа

Главная » Файлы » VCL » 3D Graphics

Asphyre v4.3
[ Скачать с сервера (4.82 Mb) ] 13.02.2009, 01:44

2. Основные изменения

Вся структура движка полностью изменилась – теперь нету никаких компонентов, и все настройки приходится выставлять вручную, при создании объектов. Теперь у вас есть набор глобальных переменных, которые отвечают за некоторые компоненты. Например, Devices содержит в себе ссылки на все доступные устройства, а также методы для инициализации новых. Canvas и Images содержатся в самом устройстве, т.е. «все в одном».

Кстати, новый Asphyre работает только на BDS2006 или выше: это нужно из-за необходимости в некоторых фишках нового Delphi. Например, class operator: благодаря этой замечательной возможности, можно описывать операторы (сложение, вычитание, делении и т.д.) для записей. Т.е. теперь, чтобы сложить два TPoint2 не нужно складывать каждую координату в отдельности.

Наиболее важное добавление, которого всем не хватало, это поддержка нескольких устройств, т.е. можно использовать два экрана, или даже 3. Единственный недостаток – это то, что изображения, шрифты и т.д. нужно загружать отдельно для каждого устройства. Кстати теперь можно выводить графику не только на само окно, но и на другие контролы, например TPanel.

Второе по значимости – менеджер ресурсов. Теперь вся информация о текстурах (спрайты, поверхности, динамические поверхности) и шрифтах хранится в XML-файле. Теперь для хранения не обязателен ASDb – можно использовать 7z, SQX, а можно создать свой собственный обработчик архива (некоторые уже сделали поддержку zip архивов). В XML-файлах также хранится информация о группах, т.е. каждый спрайт или шрифт относится к своей определенной группе. Теперь ресурсы не загружаются сразу, при запуске приложения – теперь вы сначала загружаете информацию о текстурах, а затем подгружаете сами текстуры по надобности. Благодаря поддержке групп, можно будет легко выгрузить изображения или шрифты из памяти нужной группы. Очень удобно.

Появилась возможность внедрять свои собственные эффекты смешивания. Вы указываете обработчик, в котором описываете свои режимы смешивания. Причем ведь можно не только их выставлять, но и другие параметры отрисовки, которые содержатся в Direct3D9.

2.1. Мелкие изменения

  • Для отрисовки изображения теперь сначала нужно вызвать процедуру UseImage, затем уже TexMap. В UseImage можно указать текстурные координаты в виде четырехугольника. Да-да, вы не ослышались – теперь можно отрисовать любую часть изображения, не только прямоугольную!
  • Введена поддержка системных шрифтов – шрифты, которые находятся у пользователя на компьютере.
  • В Canvas добавлены новые фигуры для отрисовки: лента и арка. Еще есть такие параметры как ширина линии и сглаживание ее. Они используются для тех процедур, которые оканчиваются Ex.
  • Изменился формат цвета. Теперь у нас "$AARRGGBB" вместо "$AABBGGRR".
  • Была переделана утилита FontTool и создана новая – TextureMaker. Она создает новую, прооптимизированую текстуру, а также показывает некоторые параметры, нужные для описания в XML. Единственный недостаток: нет предпросмотра. Но это пока.

3. Минимальное приложение

Что ж, пришло время написать какое-нибудь приложение на Asphyre! Надеюсь, у вас уже скачан и установлен движок? Мы создадим этот пример уже из стандартного, который находится по адресу http://asphyre.afterwarp.net/wiki.

(1) Создаем новый проект и где-нибудь его сохраняем. Подключите следующие модули:

Код на языке Delphi
uses ..., AsphyreDevices, AsphyreTimer, AsphyreDef, AsphyreImages, AsphyrePalettes,
AsphyreEffects, MediaImages, CommonUtils, AsphyreCanvas;

(2) Теперь нам нужно создать стандартные обработчики: событие таймера, настройки устройства и т.д. Добавляйте следующие процедуры в Form1 в раздел private:

Код на языке Delphi
  //процедура настройки устройства
  procedure DevConfig(Sender: TAsphyreDevice; Tag: TObject;
    var Config: TScreenConfig);
  //обработчик события таймера
  procedure TimerEvent(Sender: TObject);
  //обработчик рисования
  procedure DevRender(Sender: TAsphyreDevice; Tag: TObject);

Нажмите Ctrl+C для завершения класса. Или можно ввести их вручную, что я не советую :). Создайте событие создания комнаты. Туда впишите следующий код:

Код на языке Delphi
  Devices.Count := 1; //кол-во устройств
  if (not Devices.Initialize(DevConfig, Self)) then
  begin
    ShowMessage('Initialization failed.');
    Close;
    Exit;
  end;

  //сбор сведений об изображениях (или шрифтах, чего угодно).
  //Заметте, что только сведений. Сами изображения не загружаются
  ImageGroups.ParseLink('/media.xml');
 
  //эта ф-ия загружает изображение с заданным именем.
  //Возвращает индекс нового изображения
  Devices[0].Images.ResolveImage('success');
 
  //настройка таймера
  with Timer do
  begin
    Enabled:= True;
    OnTimer:= TimerEvent; //событие таймера
    MaxFPS:= 4000;
  end;

Процедура настройки (DevConfig):

Код на языке Delphi
  Config.Width        := 320; //ширина устройства
  Config.Height       := 240; //высота
  Config.Windowed     := True; //в окне или нет
  Config.VSync        := False; //вертикальная синхр.
  Config.BitDepth     := bd24bit; //битность
  Config.HardwareTL   := False;
  //идентиф. окна, на котором будет выводится графика
  Config.WindowHandle := Self.Handle;
  Config.DepthStencil := dsNone;

Переходим к событию таймера:

Код на языке Delphi
  //запускаем обработчик рисования
  Devices[0].Render(DevRender, Self, $FF000000);

Первый параметр - процедура, в которой будет происходить отрисовка. Второй - объект, к которому относится отрисовка. Третий - цвет фона.

И последнее, событие рисования:

Код на языке Delphi
  with Sender.Canvas do
  begin
    UseImage(Sender.Images[0], 0);
    TexMap(pBounds4s(0, 0, 320, 240, 1), cAlpha4(255), fxuBlend);
  end;

Существует несколько разновидностей UseImage. В нашем случае мы указываем нужное изображение и номер кадра. Другие виды рассмотрите самостоятельно.

(3) Нужно теперь создать сами XML-файлы. Их будет два: media.xml и images.xml. Содержание первого файла:

Код на языке XML
<unires>

 <!-- перенаправление на другой файл, в котором содержится информ. об изображениях -->
 <resource source="/images.xml" />
 
</unires>

И второго:

Код на языке XML
<unires>
 <image-group name="/images/base" option="normal">
  <image uid="success" type="image">
   <format type="A8R8G8B8" miplevels="auto" />
   <pattern width="512" height="256" count="1" padx="0" pady="0" />
   <textures count="1">
    <texture num="0" source="success.jpg" />
   </textures>
  </image>
 </image-group>
</unires>
  • В группе image-group в поле name содержится название группы.
  • Группой image вы начинаете описание нового изображения.
  • В поле uid нужно указывать название изображения, в поле type - его тип. Это может быть image - изображение, surface - поверхность, dynamic - динамическая поверхность.
  • В группе format вы указываете настройки изображения для памяти.
  • Группа pattern служит для описания кадров: width - ширина, height - высота; count - количество; padx, pady - смещение кадра.
  • Группа textures начинает блок описания включаемых текстур. Поле num - номер новой текстуры, source - путь к файлу. Если его записать ввиде "file_name | archive_path", то изображение будет загружаться из архива "archive_path".

Осталось добавить само изображение: success.jpg.

(4) Сохраним это приложение как шаблон. Для этого выберите пункт меню: ProjectAdd to Repository...


4. Заключение

Чтож, как мы видим, Asphyre 4.0 оправдал все надежды. Причем, это только начало: еще нас ждет продвинутое 3D, gui, Shaders и много еще чего. Не забывайте просматривать стандартные примеры - оттуда вы узнаете, как пользоваться архивами, поверхностями и всякими забавными "штучками". Спасибо, что были с нами, удачи!

Категория: 3D Graphics | Добавил: Skinner
Просмотров: 1247 | Загрузок: 226 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2024 Хостинг от uCoz