Simulation Manager - плагин, который позволяет связать сторонний программный код или скрипт с ПО VR Concept для взаимодействия с моделью и создания динамики в сцене. Связь происходит с помощью UDP.
Получение и отправка происходит чтением и отправкой единой датаграммы.
Пакет (как на отправку и прием) является массивом из элементов типа double.
Индекс массива является индексом параметра.
Весь массив должен передаваться одним пакетом (текущее ограничение), поэтому размер массива должен быть не больше размера минимальной целой датаграммы, которую может отправить сетевое оборудование (смотрите стандарт UDP).
Пример на вход/выход: 0.13 0.2 0 0 0.4 (vector<double>). Угол передается в градусах, параметр звука (1 - 100) - громкость, в цвете - каждые байт отводится на R,G,B.
1. Запустите приложение “VR Concept Launcher” и добавьте модель в сцену
2. Перейдите на вкладку “Плагины” в боковом меню (слева)
3. Перейдите на вкладку “Плагины” в верхнем меню и нажмите кнопку “добавить плагин” (розетка со знаком +)
4. В открывшемся окне найдите плагин SimulationManager (Менеджер симуляции) и поставьте галочку в окошке рядом с ним. Нажмите “ок”.
5. Перейдите на вкладку “сцена” в боковом меню (слева), затем нажмите правой кнопкой мыши на модель в дереве сцены. Выберите “Добавить свойство”>”Симуляция параметров”
6. Теперь, в разделе “Свойства объекта” (справа), появилось меню плагина Simulation Manager - “Симуляция параметров”
1. Для настройки плагина Simulation Manager требуется перейти на вкладку “Плагины” в боковом меню (слева), а затем, в списке плагинов, найти и выбрать (левой кнопкой мыши) плагин “Simulation Manager”.
2. После этого, в меню “Свойства объектов” (справа), откроется окно настройки плагина.
3. В окне настройки плагина можно установить следующие параметры:
Тэг наблюдателя (Humaninput Tag) - указывается тэг наблюдателя. По умолчанию можно оставить поле пустым.
Адрес хоста - можно прописать адрес хоста (VR Concept). По умолчанию значение 127.0.0.1.
Порт для приёма - порт для приёма данных в VR Concept. По умолчанию 6501.
Порт для отправки - порт для отправки данных из VR Concept. По умолчанию значение 6502.
Размер буфера для отправки - количество данных, которое может принимать или передавать VR Concept за один раз. Рекомендуем выставлять значение большее или равное 10.
Передавать положение головы - включение передачи положения головы.
Индекс положения головы в выходном массиве - индекс положения головы в выходном массиве.
Передавать ориентацию головы - включение передачи ориентации головы.
Индекс ориентации головы в выходном массиве - индекс ориентации головы в выходном массиве.
Имя группы
Переопределяемая группа
Количество величин для симуляции – количество данных которые мы будем передавать в VR Concept.
Количество возвращаемых величин - количество данных которые мы будем принимать из VR Concept.
Показывать окно – отображение окна, где показаны параметры.
Показывать заголовок – поставить галочку, если нужен заголовок у поля.
Текст заголовка - задать статический текст заголовка окна.
Ширина окна - задать ширину окна в метрах.
Привязать положение окна – привязка положения окна к положению объекта.
Положение окна – перемещение окна.
Ориентация окна - вращение окна.
Настройка величин для симуляции - запись параметров которые мы будем передавать в VR Concept.
Настройка возвращаемых величин - запись параметров которые мы будем принимать из VR Concept.
В свойстве "Настройка величин для симуляции " - формат записи: <тип>:<индекс>:<пар2>:<пар3>:<пар4>.
<тип> - команда, которую нужно выполнить при входящем пакете.
<индекс> - индекс параметра входящего пакета.
1. Тип "move" - перемещение объекта
Пример: move:0:1.0:1,1,1 (0 - индекс:1.0 - коэффициент масштабирования:1,1,1 - перемещение по осям)
2. Тип "rotate" - вращение объект
Пример: rotate:1:1.0:1,0,0 (1 - индекс:1.0 - коэффициент масштабирования:1,0,0 - поворот по оси X)
Пример: rotate:2:1.0:0,1,0 (2 - индекс:1.0 - коэффициент масштабирования:0,1,0 - поворот по оси Y)
Пример: rotate:3:1.0:0,0,1 (3 - индекс:1.0 - коэффициент масштабирования:0,0,1 - поворот по оси Z)
3. Тип "display" - вывести на окно значение
Пример: display:2:1:Так :4 (2 - индекс:1 - количество символов после запятой: “Так”:4 - сдвиг значения от описания )
4. Тип "sound" - вывести звук* - задавать элементу модели.
Форматы, которые можно использовать: mp3, wav, flac, acc, ogg, mp4, mkv, webm
Команды для отправки:
"<индекс> 0" - остановить воспроизведение.
"<индекс> (от 0 до 1)" - громкость проигрывания (запуск проигрывания: 1).
Чтобы запустить звук еще раз, после одиночного проигрывания, сначала остановите воспроизведение и отправьте запуск проигрывания еще раз.
Пример: sound:3:step1.wav (3 - индекс:step1.wav - файл который необходимо проиграть. Файл проигрывается один раз.)
Пример: sound:4:LOOP:step1.wav (3 - индекс:LOOP - музыка проигрывается циклично:step1.wav - файл который необходимо проиграть)
5. Тип "ambient","diffuse","specular","emission","shininess", “opacity” - материал объекта
Для "shininess", “opacity”:
Пример: opacity:4:1 (4 - индекс:1 - значение непрозрачности)
Для"ambient","diffuse","specular","emission":
Пример: ambient:5 (5 - индекс)
Передаётся число - 479132
479132 / 256 = 1871 (Остаток 156)
1871 / 256 = 7 (Остаток 79)
7 / 256 = 0 (Остаток 7)
RGB код будет равен (156, 79, 7)
6. Тип “animation” - проигрывание анимации
Необходимо применять только на корневой элемент объекта, у которого есть свойство “Параметры анимации”.
Пример: animation:0:Take 001:LOOP(0 - индекс:Take 001 - Имя анимации которую нужно проиграть:LOOP - проигрывать циклично)
Команды для отправки:
"<индекс> 0" - остановить воспроизведение для LOOP, ONCE.
"<индекс> 1" - запуск анимации для LOOP, ONCE.
"<индекс> 1" - сброс для RESET.
"<индекс> -1" - запуск анимации в обратном порядке для LOOP, ONCE.
7. Тип: "scale" - масштабирование
Пример: scale:0:1.0:2,2,2 (0 - индекс:1.0 - коэффициент масштабирования:2,2,2 - масштабирование по осям)
В свойстве "Настройка возвращаемых величин" - формат записи: <тип>:<индекс>:<пар2>:<пар3>.
<тип> - команда, которую нужно выполнить при выходящем пакете.
<индекс> - индекс параметра выходящего пакета.
1. Тип "rot_angle" - отправить поворот объекта
Пример: rot_angle:0:0,45 (0-индекс:0 - минимальный, 45 - максимальный угол)
После написания команды добавляется свойство “Вращение вокруг оси”.
Необходимо указать следующие параметры:
- Центр вращения в центре детали;
- Центр вращения;
- Ограничить вращение(активировать)
- Минимальный/Максимальный угол(задать значения минимального и максимального угла вращения, которые написаны указаны в команде).
2. Тип "position" - получить позицию объекта (передаётся в трёх строках, тремя параметрами для трёх осей XYZ)
Пример: position:23:0:1,0,0 (23 - индекс:0 - глобальные координаты:1,0,0 - по оси X)
Пример: position:24:0:0,1,0 (24 - индекс:0 - глобальные координаты:0,1,0 - по оси Y)
Пример: position:25:0:0,0,1 (23 - индекс:0 - глобальные координаты:0,0,1 - по оси Z)
3. Тип "orientation" - ориентация в пространстве.
Пример: orientation:31:0 (31 - индекс:0 - глобальная ориентация)
Возвращается 3 значения по индексам 31, 32, 33.
4. Тип "scale" - получить масштаб объекта (передаётся в трёх строках, тремя параметрами для трёх осей XYZ)
Пример: scale:26:0:1,0,0 (26 - индекс:0 - глобальный масштаб:1,0,0 - по оси X)
Пример: scale:27:0:0,1,0 (27 - индекс:0 - глобальный масштаб:0,1,0 - по оси Y)
Пример: scale:28:0:0,0,1 (28 - индекс:0 - глобальный масштаб:0,0,1 - по оси Z)
Лекция “UDP в проектной деятельности”