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

К сожалению, как и большинство наших Delphi блоггеров, я страдаю хроническим цейтнотом. И чем ближе к Новому году, тем острее он ощущается.

Тем не менее, как я и обещал, продолжаю серию Firemonkey на практике. Документации по новому фреймворку пока мало, приходится разбираться, что называется “на ощупь”. Поэтому, особо ценными будут ваши комментарии. Помимо, этой рубрики, я взялся за перевод материала Марко Канту Откройте для себя FireMonkey, платформу для создания бизнес-приложений следующего поколения. На праздниках добью, ведь у меня же будут целых два дополнительных выходных! :)

Ad rem! Сегодня мы поговорим о камерах.

Как только мы создали новую FireMonkey 3D форму, мы сразу можем размещать на ней 3D объекты. И эти объекты сразу же становятся видимыми на форме. Если мы разместим, предположим цилиндр (TCylinder) в центре формы (а именно в центр формы новые компоненты постоянно и норовят попасть при размещении на форме), то мы увидим “горизонтально развернутый” цилиндр. Мы можем переместить его в пространстве или развернуть, изменив свойство RotationAngle. Но у нас имеется еще одна замечательная возможность. Мы можем посмотреть на нашу 3D фигуру с другой точки. Для этого разместим на форме компонент TCamera. Значение свойства Position.Z установим -5. Остальные свойства менять не будем.

firemonkey-camera

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

Для того, что бы увидеть сцену с новой камеры мы должны изменить свойство формы UsingDesignCamera = False. А свойству Camera следует присвоить ссылку на объект Camera1. В данном случае это произойдет автоматически, но если вы разместите несколько камер на форме, то с помощью этого свойства вы сможете изменять активную камеру.

Теперь программу можно запускать на выполнение. Визуально цилиндр будет находится значительно ближе. Если быть точным, то приблизился не цилиндр, а точка обзора к цилиндру.

Как вы понимаете, в приложении можно использовать несколько камер, переключая их по необходимости. Таким образом, мы сможем обозревать одну и ту же сцену как бы с разных позиций. Более того, камера может двигаться в пространстве как и любой другой 3D объект.

Я не буду забегать вперед. Движение объектов в FireMonkey -  тема для отдельного раcсказа, но пример использования движения камеры, думаю, будет здесь уместен.

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

В контексте отображения объектов разными камерами следует упомянуть еще одно интересное свойство 3D  объектов.

property Projection: TProjection,

где

TProjection = (pjCamera, pjScreen);

По умолчанию, для любого объекта это свойство имеет значение pjCamera.

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

Соответственно, координаты объекта теперь будут задаваться в пикселях. Таким образом, при изменении размера формы объекты с разными значениями свойства Projection будут вести себя по разному.

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

Вот здесь и пригодится школьный курс тригонометрии :).

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

Напоминаю, что до окончания конкурса на DelphiFeeds.ru осталось 2 дня.

Если вы посылали на конкурс свою работу и не получили от меня ответа, прошу послать еще раз. Обилие спама просто удручает.

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

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


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

4 комментария: Firemonkey на практике #1

  • Отлично. Привязка какого-либо объекта к камере (у тебя “пистолет”) очень правильно. Иначе реально сложно понять, то ли объект к тебе едет, то ли ты к объекту.

    В шутерах всё просто, там прицел есть. Т.е. наблюдаемых эффект движения именно наблюдателя требует неизменяемого (по размерам) объекта. С одной стороны, мы игры реально писать не будем, а с другой – именно это и расширяет наши познания в рамках исследовательского программирования.

    • Основная проблема для написания движка с FireMonkey – решить задачу пересечения объектов. Что бы условный игрок не проходил сквозь стены и предметы. В принципе, геометрия в книгах расписана неплохо. Но повозиться все -равно придется.

  • Хорошая заметка. Так держать!

  • Уведомление: FireMonkey.RayCastIntersect | Блог Delphi программиста

Ответить на echmel Отмена ответа

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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



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