Блог Александра Божко
Архивы
Рубрики

FireMonkey

За последние дни мне пришло сразу несколько писем с вопросами относительно использования FireMonkey 3D. Прошу меня простить, если не сразу отвечаю на них, но ответы часто требуют некоторой подготовки. К тому же, не на все ваши вопросы можно ответить в двух словах. Естественно, что отвечать я планирую в данном блоге.

Данный пост родился в процессе подготовки одного из таких “ответов”. Описанный ниже прием я решил вынести в отдельный пост исключительно ради более удобной структуризации материала.

Как импортировать COLLADA (.dae) модель в FireMonkey программно (в Run Time).

Изначально, в секции uses необходимо подгрузить два модуля FMX.DAE.Importer и FMX.Import.

Приведенный ниже код демонстрирует как решить поставленную задачу.

var
MI: TDAEModelImporter;
ImSe: TModelImportServices;

begin
 MI:=TDAEModelImporter.Create;
 ImSe:=  TModelImportServices.Create;
 ImSe.RegisterImporter(MI);

 Model3D1.LoadFromFile('H:\ScreenShorts\SU_Model\cube.dae');

...
end;

Прежде чем загружать файл в компонент TModel3D, мы должны зарегистрировать т.н. импортер. Иначе формат файла попросту не будет распознан. В режиме проектирования, как вы знаете, ничего подобного делать не нужно. Достаточно просто задать свойство MeshCollection с помощью встроенного диалога.

О том, какие нюансы существуют при импорте моделей в FireMonkey - в следующем посте.

А пока напоминаю:

  1. До окончания конкурса осталось менее недели!
  2. Воспользоваться специальными предложениями Embarcadero вы можете только до 29 июня.

Другие статьи серии:

FireMonkey. Tips & Tricks #0
FireMonkey. Tips & Tricks #1
FireMonkey. Tips & Tricks #2 (Upd2)
FireMonkey. Tips & Tricks #4

В преддверии Чемпионата Европы по футболу я решил реанимировать свою экспериментальное приложение, моделирующее полёт мяча на футбольном поле. Более того, появилось желание придать этому приложению некоторую осмысленность. На идею создания миниигры меня натолкнул конкурс в  футбольной телепередаче. Суть проста. Журналист берет сумку с футболками и едет на тренировочную базу футбольной команды. Игроки команды с центра поля пытаются попасть в перекладину. Попавшему вручается футболка с надписью “Я попал!”.

Естественно, никто не попадает… Журналист забирает футболки и уезжает. Зато на память остается масса позитива…

Даже самому захотелось попинать мячик. А кто мешает? К тому же заготовка футбольного поля и летающий мяч уже есть. Осталось сделать систему управления, внешний антураж и, пожалуй, самое сложное – определить попадание мяча в перекладину. За основу я взял более точную модель, работающую с помощью таймера.

Управление

Для того, чтобы задать параметры удара нам необходимо обозначить силу удара и его направление. Направление задается углами по осям X и Y. Конечно, проще всего было бы реализовать, например, с помощью TComboTrackBar. Но такой вариант имеет серьезный недостаток – достаточно выставить параметры удара один раз, и после этого продолжать бить с теми же параметрами. Решение для организации более интересного геймплея я подсмотрел в рекламных банерах. Все очень просто.

Два компонента TPie динамически изменяют свои значения (реализовано с помощью таймера). За силу удара отвечает TProgressBar. Обработчик таймера выглядит приерно так:

procedure TMy3DForm.tmAngleYTimer(Sender: TObject);
begin
if UD then
PieYAngle.StartAngle:= PieYAngle.StartAngle+1
else
PieYAngle.StartAngle:= PieYAngle.StartAngle-1;

if (PieYAngle.StartAngle=0) OR (PieYAngle.StartAngle=-90) then
UD:= not UD;
end;

Для того, что бы значения углов и силы удара изменялись не синхронно, интервалы таймеров устанавливаются случайным образом. По нажатию на соответствующий контрол можно (или нельзя, в зависимости от уровня сложности игры) остановить таймер, и, соответственно, изменение значения.

Реализовав все это, я обнаружил, что попасть в перекладину не легче чем настоящим мячем на настоящем поле.

Попадание.

Определение попадания мяча в перекладину интересная с академической точки зрения задача. В FireMonkey нет никаких встроенных механизмов обнаружения коллизий, поэтому сам факт попадания пришлось рассчитывать. Вычисления я делал последовательно по плоскостям. Т.е., если мяч попадает в плоскость, ворот, то считаем может-ли он пересечься с перекладиной по высоте, а затем и по ширине (т.е. не пролетел-ли он левее или правее перекладины). При этом учитываются толщина перекладины и радиус мяча.

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

Что дальше?

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

А до начала Чемпионата не пропустите конференцию “Кросс-платформа 2012″!

Другие статьи серии:

Firemonkey на практике #0
Firemonkey на практике #1
Firemonkey на практике #2. Освещение и материал поверхности 3D объектов
Firemonkey на практике #2. Движение 3D объектов
Firemonkey на практике #3. Использование 3D моделей
Firemonkey на практике #5.

На прошлой неделе был выпущен набор исправлений для 4-го апдейта.

Перечень того, что испралено приведен здесь.

Обновление доступно для скачивания зарегистрированным пользователям.

Я уже успел произвести установку обновления. Она занимает довольно много времени. Так, что, наберитесь терпения.

Вышел Help Update 5 для Delphi XE2 и C++Builder XE2. Добавлено очень много материала по FireMonkey.

Подробнее можно почитать здесь.

Размер обновления – 931 М. Доступен для зарегистрированных пользователейю Качать и устанавливать необходимо вручную.

Прежде чем приступить к написанию этого поста хочу напомнить, что скоро заканчивается срок действия специального предложения от Embarcadero, согласно которому обновиться до XE2 могут владельцы любой версии Delphi, C++ Builder или Rad Studio. Одновременно заканчивается и акция “Купите один продукт – второй получите бесплатно!”.

Вы еще можете успеть воспользоваться акционным предложением и купить Delphi, C++ Builder или Rad Studio on-line.  А резиденты Украины могут воспользоваться акционным предложением на сайте “Delphi в Украине”.

Несколько слов про четвертый апдейт. По части 3D в FireMonkey поменялось довольно много. Кое что из написанного мной в предыдущих постах утратило актуальность. Вероятно прийдется произвести ревизию текста и кода.

Ну а теперь, непосредственно к теме повествования.

В FireMonkey приложениях можно успешно использовать 3D модели. Об этом я говорил в предыдущих постах. Для того, что бы отобразить модель на форме используется компонент TModel3D. В настоящий момент поддерживаются три формата моделей (*.ase, *.dae и *.obj). За выбор модели отвечает свойство MeshCollection. Проблема же заключается в том, что разные 3D редакторы поддерживают эти форматы по разному. И некоторые модели способны “повесить” IDE при загрузке. Сегодня существует достаточно много редакторов, но большинство из них платные. Да и создание моделей требуют определенных навыков. Готовые же модели также стоят приличных денег. Тем не менее, бесплатные решения бывают хорошими, особенно если их создает Google.

Рекомендую Google SketchUp. Легкий бесплатный 3D редактор. Но самое ценное то, что существует огромная коллекция бесплатных моделей для этого редактора. И эти модели абсолютно корректно открываются в Delphi (следует выполнить экспорт в формат *.dae).

Нашлась даже модель родного ОСК “Металлист”, где уже через три месяца пройдут игры Евро 2012. Как видно на ролике, эта довольно сложная модель прекрасно отображается в FireMonkey программе.

В принципе, работа с моделями не представляет из себя ничего сложного. В приведеном выше примере модель размещена в центре формы. Там же помещен объект TDummy, к которому привязана камера. Вращение TDummy создает иллюзию вращения камеры вокруг стадиона.

Код приложения приводить не буду, при желании вы сами сможете установить Google SketchUp и совершить экскурсию по стадионам, принимающим Евро 2012 с помощью FireMonkey.

Если вы знаете другие бесплатные редакторы и коллекции моделей – буду признателен за ссылку.

И в заключение – небольшой анонс. В ближайшее время на DelphiFeeds.ru будет объявлен новый конкурс. Следите за новостями.

Другие статьи серии:

Firemonkey на практике #0
Firemonkey на практике #1
Firemonkey на практике #2. Освещение и материал поверхности 3D объектов
Firemonkey на практике #2. Движение 3D объектов
Firemonkey на практике #4. Ты попал!
Firemonkey на практике #5.

Прежде всего, сегодня вышел обещанный Delphi XE2 и C++ Builder XE2 Update 4.

Зарегистрированные пользователи могут скачать iso образ Delphi XE2 и C++ Builder XE2 с включенным Update 4,  либо воспользоваться автоматическим обновлением.

Пока не могу сказать ничего конкретного по поводу данного релиза. Качаю.

Кроме того, сегодня состоится очередной вебинар с Евгением Крюковым, посвященный стилям в FireMonkey.

Не пропустите!

Для тех, кто хочет глубже разобраться с LiveBinding - Understanding RAD Studio LiveBindings;

Для тех, кто читает DelphiFeeds.ru – получать новостную ленту можно с помощью FaceBook.

О действующих акциях компании Embarcadero вы можете узнать здесь.

http://cc.embarcadero.com/myreg

Перед тем как почесть этот пост я советую посмотреть ролик Всеволода Леонова, посвященный анимации.

Собственно, существует, как минимум два способа реализовать движение объектов в FireMonkey.

Первый из них – банально менять координаты объекта по таймеру.

Второй – использовать компонент TFloatAnimation.

На видео проиллюстрирована реализация движения тела, брошенного под углом к горизонту обеими способами.

И здесь можно увидеть, что траектории полета мячей немного отличаются. Почему? Давайте попробуем разобраться.

Левый мяч “летит” с помощью таймера. Код примерно такой:

Читать далее

Не могу пройти мимо этой статьи. Визуализация физики биллиарда с помощью FireMonkey. Anders Ohlsson.

Отличный пример с исходным кодом. Рекомендую всем. кто хочет познакомиться с 3D возможностями FireMonkey.

Как и обещал, продолжаю повествование о FireMonkey.

Сегодня несколько слов об освещении 3D сцены и об окраске поверхностей 3D объектов. Не смотря на кажущуюся простоту, тема довольно  интересная.

Представьте себе обычную комнату, с мебелью и другими предметами интерьера, в которой полностью отсутствует освещение. Теперь давайте создадим новую 3D форму, поместим в ней несколько 3D объектов и… покрасим ее в черный цвет. Примерно так:

self.Color:= TAlphaColors.Null;

Фактически, таким образом,  мы получим модель идеальной темной комнаты. В которой, как справедливо заметил Конфуций, очень трудно искать черную кошку. В роли кошек, в нашем случае выступают 3D фигуры. Ни одной фигуры на форме, как вы понимаете, не видно. Вот с этого места, на мой взгляд, и следует рассказывать об освещении и свойстве 3D объектов FireMonkey - Material.

property Material: TMaterial read FMaterial write SetMaterial; Читать далее

Согласно условиям конкурса “Подарки от FireMonkey”, 30 декабря 2011 года был последним днем для подачи работ. Конкурс завершен. Организаторы (компания Embarcadero Technologies и Delphifeeds.ru) благодарят всех участников за интересные работы. Окончательные итоги конкурса будут оглашены сразу по окончанию Новогодних праздников (11-го января 2012-го года).

Для тех же, кто по каким-то причинам не смог принять участие в конкурсе, есть приятный сюрприз.

По инициативе компании Embarcadero объявляется “Новогодний блиц”. Условия просты. До 10 го января, включительно, необходимо прислать приложения или компоненты, написаные на FireMonkey. Лучшая работа получит поощрительный приз.

От имени организаторов конкурса желаю всем удачи и поздравляю с наступающим Новым годом!

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика