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

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

Значения в проекте Quest3D часто меняются. Рядовая математика может быть использована для высчитывания новых значений.

Задать Значение (Set Value)
Следующие положения описывают стандартные положения обычной математики.

Old value (старое значение) = New value (новое значение)

В Quest3D, вышеуказанное утверждение может быть трансформировано в следующее.

Скопировать New value в Old value

Для копирования одного значения в другое используется канал Set Value.

В большинстве случаев канал Set Value нужен лишь для одиночного вызова. Поэтому, он обычно вызывается каналом Trigger.

Значение Выражения (Expression Value)
Математические выражения могут быть описаны в Quest3D с помощью канала Expression Value. Он служит в качестве продвинутого калькулятора. Окно его настроек содержит бокс для фактической формулы и вспомогательный текст, описывающий возможные переменные и операторы. Справочный Материал описывает каждый из этих элементов в более подробных деталях.

Действительное значение Expression Value равняется результату выражения внутри канала. Этот результат также отображается под ‘Current Value’ (текущее значение) в окне настроек.

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

Значения, подключенные к потомственным входам Expression Value могут быть использованы, как часть выражения в канале. Первый потомок представлен буквой ‘A’, второй - буквой ‘B’ и т.д.

Канал Expression Value может быть назван по его выражению при выборе опции ‘Rename Channel to formula’ (переименовать канал в формулу) в окне настроек.

Следующий пример демонстрирует часто используемую комбинацию каналов Set Value, Expression Value и Value.

На примере ниже, при каждом нажатии пробела к каналу ‘Value’ добавляется ‘1’.

Expression Values также может служить в качестве входного условия для каналов If и Trigger. На изображении ниже, структура читается, как ‘если A равно B, тогда запустить следующие каналы’.

На втором изображении условие ‘A == B’ соблюдено.

Множественные выражения могут быть привязаны друг к другу в одном канале с помощью логических операторов AND ( && ) и OR ( || ).

На изображении выше условие будет соблюдено, если ‘A==1 && B==2’. Выражение нужно читать, как ‘если A равно одному и B равно двум’.

Выражения также могут содержать условия в форме положений If Else. На изображении ниже выражение ‘A==B ? C : D’ читается как ‘если A равно B, тогда результат C, иначе результат D’.

На нижнем изображении условие ‘A==B’ соблюдено. Результатом выражения является значение ‘C’.

Графики (Envelopes)
Кроме немаловажной роли в анимации, графики Envelopes также имеют другие функции.

Графики в канале Envelope представляет двухмерную математическую функцию. Для продвинутых имитаций и моделей формулы могут быть использованы с помощью вставки ряда координатных пар в график. Quest3D позаботится об интерполяции между этими точками.

График на изображении выше показывает формулу ‘y = x²’.

Одно множество может быть преобразовано в другое с помощью Envelope. Иначе говоря, Envelope описывает зависимости между двумя значениями.

Смешивание наборов движений персонажа может быть завязано на скорости перемещения. График на изображении выше увеличивает входное значение скорости с ‘0’ до ‘5.0’ для смешивания выходных значений от ‘0’ до ‘1.0’. График нелинейный.

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

График, приведенный выше, ограничивает выходные значения между ‘-1’ и ‘1’.

Урок
Математика - важный аспект большинства программ Quest3D. Этот урок является упражнением по работе со следующими каналами: Value, Set Value, Expression Value и Envelope.

Необходимая сцена Quest3D:
..\Tutorials\3.2 – Math\Math.cgr
Необходимые шаблоны:
Variables \ Value \ Set Value
Variables \ Value \ Expression Value
Variables \ Value \ Value
Variables \ Value \ Envelope
Logic \ User Input \ Mouse \ Position \ Mouse Screen X

Шаг за шагом:

  • Откройте сцену, ‘Math.cgr’. Она содержит простую логическую структуру.
  • Перетяните канал Set Value в Граф Каналов и подключите его ко второму потомственному входу Trigger.
  • Добавьте канал Value и подключите его к первому потомственному входу канала ‘Set Value’.
  • Смените значение этого канала Value на ‘1’.
  • Перетяните другой канал Value в Граф Каналов и подключите его ко второму потомственному входу канала ‘Set Value’. Переименуйте этот Value в ‘Current Value’ (текущее значение).

  • Переключитесь в Run Mode.
  • Нажмите пробел. Обратите внимание, что канал ‘Set Value’ запустился единожды. Также обратите внимание, что значение первого канала Value копируется во второй канал Value. Теперь оба равны ‘1’.
  • Переключитесь в Edit Mode.
  • Добавьте канал Expression Value и подключите его к каналу ‘Calculations’.
  • Дважды щелкните на канале ‘Expression Value’ для открытия окна его свойств.
  • В поле ‘Expression’ (выражение), введите ’1’. Обратите внимание, что значение ‘Current Value’ теперь равно ‘1’. А также значение ‘Expression Value’ теперь ‘1’. (подключите значение выражения expression value к оператору каналов channel caller, чтобы он был запущен)

Нажмите ‘OK’ для подтверждения.

  • Перетяните канал Value в Граф Каналов и смените его значение на ‘3’. Подключите его к каналу ‘Expression Value’.
  • Дважды щелкните на канале ‘Expression Value’ для открытия его окна настроек.
  • В поле ‘Expression’ введите ‘A’, имея в виду Value, привязанный как потомок. Обратите внимание, что текущее значение ‘Current Value’ теперь равно ‘3’. Также, значение канала ‘Expression Value’ равно ‘3’.

  • Выберите и удалите канал Value, подключенный к первому потомственному входу канала ‘Set Value’.
  • Добавьте другой канал Expression Value и подключите его к первому потомственному входу канала ‘Set Value’.
  • Подключите канал ‘Current Value’ к каналу ‘Expression Value’.
  • Дважды щелкните на канале ‘Expression Value’ для открытия окна его настроек. В поле выражения ‘Expression’ введите следующую формулу: ‘A + 1’.
  • Выберите опцию ‘Rename Channel to formula’ (переименовать канал по формуле) и нажмите ‘OK’ для подтверждения.

  • Переключитесь в Run Mode.
  • Нажмите пробел. Обратите внимание, что значение канала ‘Current Value’ увеличилось на один (‘1 + 1 = 2’)
  • Еще раз нажмите пробел. Значение увеличилось снова (‘2 + 1 = 3’).
  • Переключитесь в Edit Mode.
  • Смените формулу в Expression Value на ‘A < 4 ? A + 1 : 0’. Эта формула должна быть прочитана, как ‘если A меньше четырех, тогда результат равен A плюс один, иначе результат равен нулю’.
  • Переключитесь в Run Mode.
  • Нажмите пробел. Обратите внимание, что ‘Current Value’ теперь 4.
  • Еще раз нажмите пробел. Обратите внимание, что ‘Current Value’ равен 0.
  • Добавьте канал User Input и подключите его к каналу ‘Calculations’ (вычисления).
  • Дважды щелкните по каналу ‘User Input’ для открытия его окна настроек. Из выпадающего списка выберите ‘Mouse Information’ (информация мыши). Из второго выпадающего списка выберите ‘Mouse Screen Pos X’ (позиция мыши по X координате экрана). Нажмите ‘OK’ для подтверждения.

  • Переключитесь в Run Mode.
  • Поводите мышь слева направо. Обратите внимание, что значение канала ‘User Input’ изменяется. Максимальное значение зависит от разрешения вашего монитора.
  • Переключитесь в Edit Mode.
  • Выберите и удалите соединение между каналами ‘User Input’ и ‘Calculations’.
  • Перетяните канал Envelope в Граф Каналов подключите его к каналу ‘Calculations’.
  • Подключите канал ‘User Input’ к каналу ‘Envelope’.
  • Дважды щелкните по каналу ‘Envelope’ для открытия окна его настроек. Создайте ключи в (0, 0) и (500, 1). Нажмите кнопку ‘All’, чтобы увидеть график целиком.

  • Нажмите ‘OK’ для подтверждения.
  • Переключитесь в Run Mode.
  • Переместите мышь слева направо. Обратите внимание, что канал ‘Envelope’ изменяется от ‘0’ до ‘1.0’.
  • Переключитесь в Edit Mode.

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

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