Понятие объекта в пространстве

Материал из Deeptown Manual
Перейти к: навигация, поиск

Содержание

Введение

Ключевым понятием в World Engine является Объект. Под этим понятием подразумевается некоторая атомарная сущность, которая может взаимодействовать с:

  • пространством
  • пользователем
  • другими объектами.

Понятие объекта, в общем случае, шире, чем некоторое физическое тело в виртуальном пространстве. Объект может даже не обладать координатами в пространстве: весь его смысл в этом случае заключается во взаимодействии, которое не обязано быть физическим. Тем не менее, большая часть объектов — это именно объекты виртуального пространства.

Представления объекта

Каждый объект может быть представлен в нескольких (а может быть не представлен ни в одном) из трех пространств: механическом, физическом и графическом. Все три представления связаны между собой, но важно понимать, что это — три разных представления.

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

  • массой,
  • матрицей момента инерции,
  • координатами,
  • кватернионом вращения.

Обратите внимание, что в механическом пространстве отсутствует какая-либо информация о форме объекта.

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

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

Под примитивом здесь понимается один из нескольких геометрических примитивов: паралеллепипед, сфера, цилиндр и несколько других.

В графическом пространстве, объект представляет собой набор графических примитивов, таких как:

  • полигональные поверхностей с различными графическими свойствами (начиная от текстурирования и заканчивая шейдерами),
  • источники освещения,
  • камеры.

Графическая модель также связана с механическим или физическим представлением — т.е. движок автоматически изменяет положение графических примитивов в соответствии с перемещениями физических.

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

  1. Аватар. Имеет представления во всех трех пространствах. Является полноценным "физическим" объектом.
  2. Фаербол, эмиттеры частиц (дым, огонь и т. д) либо другие графические фокусы. Представляются в графическом пространстве.
  3. Поля сил как проявления заклинаний или обычного ветра. Представляются в физическом пространстве.

Данные объекта

Данные объекта хранятся в DISS файле в формате BXL. Объект также может зависеть от других файлов (скрипты, текстуры и др.), ссылки на которые приводятся в основном файле.

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

Все примеры приведены в формате XML; для конвертирования из XML в BXL существует утилита bxd — на данный момент она реализована на Perl. Для конвертирования объекта, наберите команду

bxd filename.model.xml -f filename.model

где filename.model.xml — имя файла с XML описанием.

Cheers pal. I do apprecitae the writing.

Более сложный пример

Вот пример более сложной модели куба:

<source lang="xml" line="1"> <model bxd="http://dao.deeptown.org/bxd/model.bxd">

   <material_script node="/media/materials/cube.material" />
   <body name="cube">
       <mass_data>
           <mass value="1" />
       </mass_data>
       <geometry>
           <geom type="box" width="1" height="1" depth="1" />
       </geometry>
       <surfaces>
           <mesh name="cube" node="/media/meshes/cube_small.mesh" />
       </surfaces>
   </body>
   <externals>
       <event_receiver url="gide:/media/scripts/cube_small_dynamic.gbc!CubeSmallDynamic" />
   </externals>

</model> </source>

Рассмотрим теги, которые были добавлены в этот файл:

4-6
Тег mass_data определяет механическое представление тела. В нем можно задать массу (тег mass) и матрицу инерции (не указанный здесь тег inertia), которая по-умолчанию является единичной матрицой.
14-16
В теге externals приводятся дополнительные данные объекта. В данном случае, это тег event_receiver, который определяет обработчик события.

Обработчик события, как и многое другое, задается при помощи URL. Под URL всегда понимается некоторая строка, включающая в себя тип сущности (в данном случае — обработчика) и адрес этой сущности, который зависит от ее типа. Тип и адрес разделены двоеточием.

Единственный на данный момент реализованный обработчик событий имеет тип gide. Этот обработчик передает все события некоторому объекту Gide-класса. В адресе указано имя файла скрипта (в DISS) и имя класса, разделенные символом "!".

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты