Guest3d.wohlnet.ru
некоммерческий проект, цель которого объединить профессионалов для обмена опытом и знаниями в области real-time рендеринга
guest3d
3.01: Программирование: Логика

В Quest3D, логика - это основа программы. Логика описывает, что и когда происходит.

Примеры логики:

  • Объект, который отображается, или НЕ отображается на экране.
  • Дверь, открывающася нажатием клавиши.
  • Музыкальная дорожка, проигрываемая при определенном событии.
  • Текущий экран приложения, отталкивающийся от выбора меню.

Ряд каналов Quest3D специально разработан для внесения логики в программу. Наиболее важные из этих логических каналов будут обсуждены в данном разделе.

Оператор Каналов (Channel Caller)
Как гласит название, Channel Caller просто вызывает каналы, связанные с ним. Он используется для добавления структуры в проект. Channel Caller могут быть видны, как разделители, или даже ‘главы’ в программе Quest3D.

Изображение ниже показывает пример структуры программы, разделенной Channel Caller.

Channel Caller должны быть названы правильно и используются часто.

Если (If)
Как и Channel Caller, канал If вызывает своих потомков. Тем не менее, канал If вызывает потомков лишь в случае выполнения определенного условия. Это условие может быть привязано к первому потомственному входу канала If, и должно быть значением (value). Только если значение НЕ ‘0’ (условие истинно, ‘true’), канал, подключенный к If вызывается.

Если/Иначе (If Else)
Канал IfElse подобен каналу If. Если подключенное условие не соблюдается (т.е. значение равно ‘0’), вызывается третий потомственный вход. Если условие соблюдается, вызывается канал, подключенный ко второму потомственному входу.

Триггеры (Triggers)
Каналы Trigger работают подобно каналам If. Trigger также вызывает своих потомков в зависимости от условия.

Существует большая разница между каналами If и Trigger.

Первая, когда условие соблюдено, Trigger запускает своего потомка лишь единожды. Для повторной активации Trigger условие сначала должно стать ложным (false), затем снова истинным (true). Пример: триггер сработал при нажатии пробела. Для его повторного срабатывания, пробел должен быть отпущен и нажат снова.

Вторая разница состоит во вводе для условия. Помимо формы от ‘0’ до ‘1’, также может быть выбрана одна из опций в окне настроек:

Пользовательский Ввод (User Input)
Канал User Input может регистрировать активность со стороны ряда источников, таких, как клавиатура и мышь. В Quest3D, пользовательский ввод выражается одним из трех типов:

  • Двоичное (бинарное) значение ‘0’ или ‘1.0’.

Пример: нажатие клавиши или кнопки мыши.

  • Аналоговое значения от ‘0’ до ‘1.0’.

Пример: движение джойстика.

  • Значение экранных координат.

Пример: движение мыши.

User input может служить значением условия и для канала If(Else) и для Trigger.

Любая клавиша на клавиатуре может быть ‘привязана’ к каналу User Input с помощью окна настроек. После нажатия на кнопку ‘Capture a key to use’ (регистрация используемой клавиши), нажмите кнопку по вашему выбору. Подобным образом могут быть зарегистрированы любые клавиши и движения мыши или джойстика.

Переключатель Каналов (Channel Switches)
Channel Switches позволяет вам выбирать между различными каналами почти любого типа. Channel Switch сначала должен быть выставлен на тот же базовый тип (base type), что и его потомок.

Далее, его первый потомок определяет, какая из подключенных версий используется: значение ‘0’ приводит к тому, что будет использоваться первый вариант, ‘1’ - второй, и т.д.

Урок
Логика в Quest3D определяет строение вашего проекта. Данный урок - это упражнение по структурированию вашей програмы с помощью Channel Caller, и работе с условиями. Условия служат в качестве входных данных для каналов If и Trigger.

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

Необходимые шаблоны:
Scene \ Start 3D Scene
Logic \ Channel Caller (x6)
Logic \ If
Logic \ IfElse
Logic \ Trigger
Logic \ Channel Switch
Logic \ Input \ Keyboard

Шаг за шагом:

  • Перетяните Start 3D Scene в Граф Каналов. Нажмите на него правой клавишей мыши и выберите ‘Set as start channel’ (установить как стартовый канал).
  • Добавьте Channel Caller и подключите его к каналу ‘Start 3D Scene’.
  • Переименуйте Channel Caller в ‘Program’.
  • Перетяните еще пять Channel Caller в Граф Каналов. Переименуйте их все следующим образом: ‘Logic’, ‘User Interface’, ‘3D Scenes’, ‘Scene 1’ и ‘Scene 2’.
  • Подумайте о логической структуре и подключите эти пять Channel Caller к вашей программе.
  • Когда будет готово, изучите структуру каналов на изображении ниже и сравните, похоже ли на него ваше собственное решение.

На данный момент, обе сцены, ‘Scene 1’ и ‘Scene 2’ вызываются. В течение следующих шагов мы добавим логику для отображения первой или второй, в зависимости от ввода с клавиатуры.

  • Разорвите связь между каналами ‘Scene 1’ и ‘3D Scenes’.
  • Добавьте канал If и подключите его ко второму потомственному входу канала ‘3D Scenes’.
  • Подключите канал ‘Scene 1’ ко второму потомственному входу канала ‘if’. Обратите внимание, что канал ‘Scene 1’ не вызывается активно (нет видимой синей линии).
  • Перетяните Value в Граф Каналов и подключите его к первому потомственному входу канала ‘if’ . Это значение Value будет условием для if.
  • Смените значение канала Value на ‘1’. Обратите внимание, что канал ‘Scene 1’ вызывается активно.
  • Верните значение канала Value на ‘0’. Обратите внимание, что канал ‘Scene 1’ больше не вызывается.
  • Выберите канал ‘Value’ и удалите его.
  • Добавьте канал User Input и подключите его к первому потомственному входу канала ‘if’. На данный момент структура каналов должна выглядеть подобно приведенной на изображении ниже.

  • Дважды щелкните по каналу ‘User Input’ чтобы открыть его свойства. Нажмите кнопку определения клавиши ‘Capture a key to use button’ и нажмите клавишу ‘1’ для регистрации. Нажмите кнопку ‘OK’ для подтверждения.
  • Переключитесь в режим Run Mode с помощью кнопки.
  • Зажмите клавишу ‘1’. Обратите внимание, что канал ‘Scene 1’ вызывается.
  • Отпустите кнопку ‘1’. Обратите внимание, что канал ‘Scene 1’ больше не вызывается.
  • Переключитесь в режим Edit Mode.
  • Выберите и удалите канал ‘if’.
  • Выберите и удалите связь между каналами ‘Scene 2’ и ‘3D Scenes’.
  • Перетяните канал IfElse в Граф Каналов и подключите его к каналу ‘3D Scenes’. (выделите и удалите связанные с ним операторы каналов, которые шли с шаблоном)
  • Подключите канал ‘User Input’ к первому потомственному входу канала ‘If Else’.
  • Подключите канал ‘Scene 1’ ко второму потомственному входу канала ‘If Else’. Обратите внимание, что канал ‘Scene 1’ не вызывается.
  • Подключите канал ‘Scene 2’ к третьему потомственному входу канала ‘If Else’. Обратите внимание, что канал ‘Scene 2’ вызывается. Текущая структура каналов должна выглядеть подобно приведенной на изображении ниже.

  • Переключитесь в режим Run Mode.
  • Нажмите клавишу ‘1’. Обратите внимание, что канал ‘Scene 1’ вызывается, а канал ‘Scene 2’ - нет.
  • Отпустите клавишу ‘1’. Обратите внимание, что канал ‘Scene 1’ больше не вызывается, а канал ‘Scene 2’ вызывается.
  • Переключитесь в режим Edit Mode.
  • Добавьте канал Trigger и подключите его к каналу ‘User Interface’.
  • Перетяните канал User Input в Граф Каналов и подключите его к первому потомственному входу канала ‘Trigger’.
  • Добавьте канал Channel Caller и подключите его ко второму потомственному входу канала ‘Trigger’. Переименуйте канал Channel Caller в ‘Event’.
  • Переключитесь в режим Run Mode.
  • Нажмите пробел. Обратите внимание, что канал ‘Event’ вызван единожды.
  • Снова нажмите пробел. Обратите внимание, что канал ‘Event’ снова был вызван единожды.
  • Переключитесь в режим Edit Mode.
  • Выделите и удалите канал ‘User Input’, который подключен к каналу ‘If Else’.
  • Выделите и удалите канал ‘If Else’.
  • Перетяните канал Channel Switch в Граф Каналов и подключите к каналу ‘3D Scenes’.
  • Дважды щелкните по каналу ‘Channel Switch’ для открытия окна свойств. Из списка выберите ‘Channel Caller’ и нажмите кнопку ‘Set’ (установить). Нажмите ‘OK’ для подтверждения.
  • Добавьте канал Value и подключите его к первому потомственному входу канала ‘Channel Switch’. Переименуйте канал Value в ‘Current Scene’ (текущая сцена).
  • Перетяните Channel Caller в Граф Каналов и подключите его ко второму потомственному входу канала ‘Channel Switch’. Переименуйте этот Channel Caller в ‘Menu’. Обратите внимание, что канал ‘Menu’ на данный момент вызывается.
  • Подключите канал ‘Scene 1’ к третьему потомственному входу канала ‘Channel Switch’.
  • Подключите канал ‘Scene 2’ к четвертому потомственному входу канала ‘Channel Switch’.
  • Смените значение ‘Current Scene’ на ‘1’. Обратите внимание, что канал ‘Scene 1’ вызывается.
  • Смените значение канала ‘Current Scene’ на ‘2’. Обратите внимание, что канал ‘Scene 2’ вызывается.

Законченная сцена:
..\Tutorials\3.1 – Logic\Logic – Complete.cgr

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