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

Delphi XE2

Обещанный пост, посвященный использованию импортированых моделей. Я уже затрагивал эту тему ранее, однако, здесь осталось достаточное количество открытых вопросов. В частности, на днях я получил письмо примерно следующего содержания:

“…какими свойствами определяются координаты поверхностей и условно центра фигуры после загрузки произвольного объекта DAE в Model3D во время исполнения программы? Т.к. даже центр объекта далеко не всегда совпадает с центром модели…”

Собственно, данный вопрос давно интересовал меня самого. Использование моделей, созданных во внешних 3D редакторах – мощный инструмент. Но для того, что бы он стал действительно полезным, нам необходимо правильно расположить модель на форме. Это не всегда просто сделать даже в режиме проектирования, не говоря уже о RunTime.

Google SketchUp 8

Google SketchUp 8

И, для того, чтобы  разобраться с данным вопросом, я решил провести несколько экспериментов. Для создания модели я использовал Google SketchUp 8, основное преимущество которого – бесплатность. Я  уже упоминал об этом редакторе ранее. Читать далее

За последние дни мне пришло сразу несколько писем с вопросами относительно использования 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.



Рассылка книжного магазина притащила информацию о новой книге.

Д.Л. Осипов. Delphi XE2. Наиболее полное руководство. К сожалению, я не знаком с книгами автора, но если верить Всеволоду Леонову, качество предыдущих  книг Дмитрия Осипова весьма достойное.

В книге дан обзор всех новинок Delphi XE2 (коих, как известно, не мало). LiveBinding, DataSnap и, конечно же, FireMonkey.

Издатель акцентирует внимание на последовательность и глубину изложения материала.

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

Купить книгу Д.Л. Осипов. Delphi XE2. Наиболее полное руководство.

Не могу пройти мимо этой статьи. Визуализация физики биллиарда с помощью 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; Читать далее

Вчера вышел Help Update 2 for Delphi, C++Builder and RAD Studio XE2.

Он доступен для скачивания только зарегистрированным пользователям Delphi XE2, C++Builder XE2, RAD Studio XE2 и Embarcadero All-Access XE.

Объем 858.5MB.

Так же обновился Embarcadero Prism XE2.

Embarcadero Prism XE2 Update 3 (November 2011 Release).

Объем 63.7MB

Стал доступен Update 2 для XE2 версий Delphi, C++Builder и RadPHP.

Вы можете скачать его, используя опцию “Check for Updates”

Тем, у кого Windows XP придется скачать Update со страницы пользователя EDN.

RAD Studio XE2 Update 2

RAD Studio XE2 Help Update 1 – http://cc.embarcadero.com/item/28613

RadPHP XE2 Update 2

Для харьковчан напоминаю:

RAD Studio XE2 in Action LIVE! Харьков

Проблема, с которой столкнулся лично, и решение которой нашел тут, среди прочих полезных советов.

В формах FireMonkey отсутствуют обработчики многих полезных событий. В частности, OnKeyUp и OnKeyDown. Но, если посмотреть структуру FireMonkey класса TControl, от которого и наследуется в конечном счете форма, то в описании можно увидеть такой код: Читать далее

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

fm0_03

fm0_01

Читать далее

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



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