Guest3d.wohlnet.ru
некоммерческий проект, цель которого объединить профессионалов для обмена опытом и знаниями в области real-time рендеринга
guest3d
3.08: Программирование: Машина итоговых положений (Finite state machine)

Проекты могут состоять из ряда подпрограмм, таких, как различные экраны меню и 3D сцены. Используя различные каналы логики Quest3D, достаточно просто переключаться между подобными экранами до тех пор, пока структура проста.

Для упрощения переключения между подпрограммами в более сложных структурах, может быть использован канал Finite State Machine. В вышеупомянутом примере, различные экраны меню могут считаться положениями (‘states’).

Finite State Machine для краткости называется ‘FSM’.

Канал Finite State Machine имеет ряд потомственных входов. Значения, подключаемые к первому потомственному входу призваны запускать изменения положения. Потомки второго потомственного входа представляют фактические положения. Вызывается только текущее положение. Наконец, потомки третьего потомственного входа могут быть запущены при особом изменении состояния положения.

Граф Машины Итоговых Положений (Finite State Machine Graph)
Окно настроек Finite State Machine выглядит подобно Графу Каналов.

Различные положения FSM представлены синими кругами. Текущее положение подсвечивается. В правой части экрана отображаются настройки выбранного объекта положения.

Выпадающий список ‘Channel to call on state’ (вызов канала при положении) содержит имена всех каналов, подключенных к потомственным входам ‘State Call Channels’ (вызываемые каналы положения) в FSM.

Соединение объектов положений (Connecting state items)
Объекты положений могут быть подключены друг к другу с помощью перетягивания линии от одного черного центра к другому. В правой части экрана показаны настройки выделенной связи положений.

Выпадающий список ‘Value channel to trigger transition’ (канал значения для запуска перехода) содержит имена всех каналов, подключенных к потомсвенным входам ‘State Change Value’ (значение изменения положения) в FSM.

Выпадающий список ‘Channel to trigger on state change’ (запускаемый канал при изменении положения) содержит имена всех каналов, подключенных к потомственным входам ‘State trigger channels’ (каналы изменения положений) в FSM.

Иерархия (Hierarchy)
На изображении ниже, текущее положение - ‘Main Menu’. Могут быть доступны только положения ‘3D Scene’ и ‘Options Menu 1’. Плюс, положение ‘Options Menu 2’, которое может быть доступно только из положения ‘Options Menu 1’. Тем не менее, положение ‘Options Menu 2’ имеет доступ к положениям ‘Options Menu 1’ и ‘Main Menu’.

Временные изменения положений (Time based state changes)
Также существует возможность создания положений, зависящих от времени. Эта функция дает пользователю некоторое время (в милисекундах), перед тем, как перейти к следующему положению.

Примеры (Examples)
Другими примерами, при которых может быть использована Finite State Machine включают уровни в создании тренеровочных программ, продвинутая анимация персонажей и поведение персонажей с искуственным интеллектом (A.I.).

Урок
Следующий урок показывает работу Finite State Machine. Машина используется для создания структуры меню.

Необходимая сцена Quest3D:
..\Tutorials\3.8 – Finite State Machine\Finite State Machine.cgr
Необходимые каналы:
Logic \ Finite State Machine

Шаг за шагом:

  • Откройте файл ‘Finite State Machine.cgr’. Он содержит экран главного меню и экран меню опций. Он также содержит две очень простые 3D сцены, одна с красной сферой, другая с синим кубом.
  • Перетяните канал Finite State Machine в Граф Каналов и подключите его к каналу ‘Program’. Обратите внимание, что его текущее значение, или ‘положение’, равно ‘0’.
  • Подключите канал ‘Main Menu’ к потомственному входу ‘State Call Channels’ канала ‘Finite State Machine’. Обратите внимание, что канал ‘Main Menu’ не вызывается, так как пока не была задана логика положения. Также обратите внимание, что новый потомственный вход ‘State Call Channel’ добавлен к Finite State Machine, позволяя подключение дополнительных каналов этого типа.
  • Подключите канал ‘Options Menu’ ко второму (пустому) потомственному входу ‘State Call Channel’ в FSM. Обратите внимание, что он пока не вызывается.
  • Подключите ярлык канала ‘Main Menu – Options Menu Button Pressed’ к потомственному входу ‘State Change Values’ канала ‘Finite State Machine’. Обратите внимание, что новый потомственный вход ‘State Change Values’ был добавлен к FSM, позволяя подключение дополнительных каналов этого типа.
  • Подключите ярлк канала ‘Options Menu – Main Menu Button Pressed’ ко второму (пустому) потомственному входу ‘State Change Values’ в Finite State Machine.

  • Дважды щелкните по каналу ‘Finite State Machine’ для открытия окна его настроек. Обратие внимание на область подобную Графу Каналов слева и опции справа.
  • Нажмите кнопку ‘New Item’ (новый элемент) и нажмите один раз в центре графа FSM. Обратите внимание, что был создан круговой объект.
  • Нажмите на объект, чтобы выделить его. Обратите внимание на его настройки, отображенные в правой части окна. Смените его имя ‘Item name’ на ‘Main Menu’.

Из выпадающего списка ‘Channel to call on state’ (канал вызываемый при положении), выберите ‘Main Menu’. Обратите внимание, что канал ‘Main Menu’ теперь вызывается, а экран главного меню отображается в окне обзорного вида Animation 3D View.

Обратите внимание, что опции в этом списке соответствуют каналам, подключенным к потомственным входам ‘State Call Channels’ (каналы вызова положения) в FSM.

  • Создайте новый объект выше ‘Main Menu’ и выберите его. Смените имя ‘Item name’ на ‘Options Menu’. Из выпадающего списка ‘Channel to call on state’, выберите ‘Options Menu’.
  • Соедините два объекта, перетянув связь от черного центра ‘Main Menu’ до черного центра объекта ‘Options Menu’. Обратите внимание на направление стрелки.
  • Нажмите на связь, чтобы выделить ее. Обратите внимание на ее настройки, отображенные в правой части окна.

Из выпадающего списка ‘Value channel to trigger transition’, выберите ‘Main Menu – Options Button Pressed’ (Главное меню - кнопка опций нажата). Обратите внимание, что значение Value с тем же именем в Графе Каналов теперь вызывается. Обратите внимание, что опции в списке соответствуют каналам, подключенным к потомственным входам ‘State Change Values’ (смена значений положения) в FSM.

  • Перетяните связь от объекта ‘Options Menu’ назад к ‘Main Menu’. Выберите связь и из выпадающего списка ‘Value channel to trigger transition’ (значение канала для запуска перехода) выберите ‘Options Menu – Main Menu Button Pressed’ (меню опций - кнопка главного меню нажата).

  • Закройте окно настроек Finite State Machine.
  • Перейдите в Раздел Анимации.
  • Переключитесь в Run Mode.
  • Нажмите на кнопку ‘Options’ в окне обзорного вида Animation 3D View. Обратите внимание, что меню опций отобразилось на экране.
  • Нажмите кнопку ‘Main Menu’ для возврата в главное меню.
  • Еще раз нажмите кнопку ‘Options’ для вывода меню опций на экран.
  • Переключитесь в Edit Mode.
  • Перейдите в Раздел Каналов.
  • Дважды щелкните по каналу Finite State Machine для открытия его окна настроек. Обратите внимание, что текущее положение, ‘Options Menu’, теперь подсвечено.
  • Закройте окно настроек FSM. В Графе Каналов, обратите внимание, что значение Finite State Machine теперь равно ‘1’.

Заметьте, что канал ‘Options Menu’ вызывается, а канал ‘Main Menu’ нет. Обратите внимание, что значение ‘Options Menu – Main Menu Button Pressed’ подсвечено, а ‘Main Menu – Options Button Pressed’ - нет.

  • Подключите канал ‘Scene Selection Menu’ к третьему (пустому) потомственному входу ‘State Call Channels’ канала FSM.
  • Подключите канал ‘Main Menu –Start Button Pressed’ к третьему (пустому) потомственному входу ‘State Change Value’ канала FSM.
  • Подключите канал ‘Scene Selection Menu – Main Menu Button Pressed’ к четвертому (пустому) потомственному входу ‘State Change Value’ канала FSM.
  • Откройте окно настроек FSM.
  • Добавьте новый объект, ‘Scene Selection Menu’. Установите его на вызов (call) канала ‘Scene Selection Menu’.
  • Подключите объект ‘Main Menu’ к объекту ‘Scene Selection Menu’ и установите его на правильную смену значения.
  • Подключите объект ‘Scene Selection Menu’ к объекту ‘Main Menu’ и установите его на правильную смену значения.
  • Закройте окно настроек FSM.
  • Перейдите в Раздел Анимации.
  • Переключитесь в Run Mode.
  • Протестируйте сцену, нажав на созданные функциональные кнопки.
  • Когда будете готовы, переключитесь в Edit Mode.
  • Создайте логику Finite State Machine для двух 3D сцен. Все необходимые каналы уже присутствуют в Графе Каналов, их только нужно правильно привязать.

Законченная сцена:
..\Tutorials\3.8 – Finite State Machine\Finite State Machine – Complete.cgr

Если у вас есть материалы, или вы хотите дополнить существующие, если вы хотите писать новости относящиеся к технологиям реалтайм рендеринга, или имеете полезные файлы, вы можете стать резидентом guest3d.wohlnet.ru. Для этого нужно написать письмо в свободной форме на den@wohlnet.ru, с указанием вашей мотивации. Кроме того, каждый резидент получает возможность создать свою страницу, ссылка на которую будет прикреплена к каждому опубликованному вами материалу.
вход