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

Переменные (Variables) могут хранить определенные типы информации. Наиболее часто используемыми типами переменных в Quest3D являются value (значение), vector (вектор), matrix (матрица) и text (текст). Все они могут хранить один экземпляр своего типа. Канал Value, например, может хранить строго одно значение.

Массивы (Arrays) могут хранить множество экземпляров информации определенного типа. Каждый из этих экземпляров или записей (records) имеет фиксированное место в массиве и может быть доступен с помощью значения индекса (index value).

Таблицы (Tables)
Массивы в Quest3D всегда являются частью таблицы (table). Окно свойств канала Array Table позволяет создать таблицу и задать ей опорное имя.

Названия столбцов (column) могут быть изменены в любое время – они используются только как пометки.

Два массива с одинаковыми именами не соединяются.
Избегайте дублирования имен во избежание проблемм.

Менеджер Массивов (Array Manager)
Array Manager в Quest3D управляет и отображает содержимое всех массивов проекта, таблично. Доступ к нему может быть получен с помощью закладки ‘Array Manager’ в Разделе Каналов и Разделе Анимации, или с помощью переключения раздел массивов (Arrays Section).

В левой части Менеджера Массивов (Array Manager) вы можете доступные таблицы (Table). После выбора таблицы правая часть отобразит доступные столбцы данной таблицы.

Для создания столбца вы можете использовать кнопку Add Column, после чего перед вами отобразится диалог, в котором вы сможете выбрать тип массива, который вы хотите задать новому столбцу.

Один прямоугольник в Менеджере Массивов (Array Manager) называется записью (record) или полем (field). Большинство типов позволяет прямой ввод или редактирование в менеджере массивов. Нажатие на другие поля (fields) откроет окно настроек соответствующего типа.

Нажатие на кнопку ‘Update Once’ (обновить единожды), обновит все отображаемые столбцы.

Типы данных (Data types) - столбцы массива могут хранить данные различных типов. Отдельно от переменных типов, упомянутых выше (value, vector, matrix и text), также возможно создать массив виртуально любого канала в Quest3D. Это определяется выбором типа из выпадающего списка массива каналов ‘Array Channel’.

Пример этой последней категории включает в себя массивы типа 3D Object или Texture. Более продвинутым случаем может быть массив сетевых значений Network Values.

Обратите внимание, что тип столбца (column) должен
быть задан с помощью кнопки ‘Set’.

Хранилища данных и ссылки (Data storage and references)
Данные хранятся в каналах Array Table (таблица массива). Для доступа и использования данных в проекте Quest3D, необходимы ссылки (references). Существуют различные типы каналов ссылок, по одному на каждый тип столбца. Канал Array Value (значение массива), например, оптимизирован именно для этого типа данных.

Окно настроек различных Array channels используется для определения, к какой таблице и к какому столбцу должна иметь доступ ссылка. Обратите внимание, что столбец таблицы для Array Channel может быть задан только однажды, по причине его Channel Switch-подобной природе.

Заполнение Массивов (Setting Arrays)
Для хранения значения в массиве, используется оператор ‘Set’ соответствующего типа. Желаемая запись в массиве задается с помощью присоединения индексного значения.

Обратите внимание, что Array Channel имеет два потомственных входа. Первый - это индексное значение. Второй может быть использован для подключения к каналу соответствующего типа. Его потомки после этого будут проходить через Array Channel.

Команды, операторы и информация (Commands, operators and info)
Array Command используется для удаления определенной записи из массива. Различные каналы Array Operator и Info могут быть использованы для извлечения информации. Изображение ниже показывает продвинутую структуру.

Циклы For Loop
Комбинация канала For Loop и массивов чрезвычайно мощна. Значение текущей повторяемости ‘Current Iteration’ используется как индекс для массива.

Смотрите Раздел 3.3 для дополнительной информации по циклам For Loop.

Урок
Массивы могут содержать большое колличество данных. Это упражнение показывает, как хранится информация в массиве и как получается доступ к ней.

Необходимая сцена Quest3D:
..\Tutorials\3.4 – Arrays\Arrays 1.cgr
Необходимые шаблоны:
Variables \ Arrays \ Array Value
Variables \ Value \ Value

Шаг за шагом:

  • Откройте сцену ‘Arrays 1.cgr’. Она содержит один текстовый объект.
  • Убедитесь, что сцена отображается в окне Animation 3D View с помощью камеры проекта Project Camera.
  • Перетяните Array Table в Граф Каналов. Подключите его к каналу ‘Main’. Дважды щелкните по каналу Array Table для открытия окна настроек.
  • Переименуйте таблицу в ‘Menu’ и нажмите кнопку Rename Channel.
  • Нажмите на закладку редактора массивов Array Editor.
  • Выберите таблицу Menu.
  • Создайтре новый столбец, нажав на кнопку ‘Add column’ (добавить столбец).
  • Назовите его ‘Options’.
  • Выберите радио-кнопку ‘Text’ и нажмите ‘OK’ для подтверждения.
  • Добавьте канал Array Text. Дважды щелкните по нему для открытия окна настроек.
  • Из выпадающего списка ‘Table’ выберите ‘Menu’.
  • Из выпадающего списка ‘Column’ выберите ‘Options’.
  • Выберите опцию ‘Update channel name’ (обновить имя канала) и нажмите ‘OK’ для подтверждения. Канал теперь настроен, как ссылка к правильной таблице и столбцу.
  • Нажмите закладку ‘Array Manager’ (менеджер массивов).
  • Снова выберите таблицу Menu.
  • Нажмите на кнопку ‘Add row’ для создания нового ряда в столбце Options.
  • В первом поле (row ‘0’) столбца ‘Options’, введите ‘Option 1’.
  • Нажмите кнопку ‘Add row’ снова для создания новой записи. Введите ‘Option 2’ в ряду ‘1’.
  • Добавьте две новые записи, “Option 3’ и ‘Option 4’.

  • Нажмите закладку ‘Channel Graph’.
  • Подключите канал ‘Menu: Options’ к каналу ‘2D Text from Texture’. Обратите внимание, что текст в обзорном виде Animation 3D View сменился на ‘Option 1’.
  • Добавьте значение Value и подключите его к каналу ‘Menu: Options’. Переименуйте его в ‘Menu Index’.
  • Смените значение канала ‘Menu Index’ на ‘1’. Обратите внимание, что текст в обзорном виде Animation 3D View сменился на ‘Option 2’.
  • Протестируйте другие опции, сменив значение канала ‘Menu Index’.

Законченная сцена:
..\Tutorials\3.4 – Arrays\Arrays 1 – Complete.cgr
Если хотите, вы можете сохранить данную группу каналов в вашу папку проектов. Следующие действия связаны с новой сценой.

Урок
Необходимая сцена Quest3D:
..\Tutorials\3.4 – Arrays\Arrays 2.cgr
Необходимые шаблоны:
Variables \ Value \ Array Value
Variables \ Matrix \ Set Matrix
3D Items \ Null Object
Variables \ Matrix \ Array Matrix

Шаг за шагом:

  • Откройте сцену ‘Arrays 2.cgr’. Она содержит ряд примитивных объектов и частично настроенную таблицу.
  • Перетяните Array Value в Граф Каналов. Дважды щелкните по нему для открытия окна настроек.
  • Из выпадающего списка ‘Table’, выберите ‘Objects’.
  • Из выпадающего списка ‘Column’, выберите ‘Type’.
  • Выберите опцию ‘Update channel name’ (обновить имя канала) и нажмите ‘OK’ для подтверждения.
  • Подключите канал ‘Objects: Type’ к первому потомственному входу канала ‘Object Type Switch’.
  • Создайте ярлык канала ‘Current Iteration’ и подключите его к каналу ‘Objects: Type’.
  • Правой клавишей мыши нажмите на канал ‘Object: Type’ и выберите ‘General Properties’ (основные настройки). В окне настроек выберите опцию обновления ‘Continuous’. Нажмите ‘OK’ для подтверждения.
  • Убедитесь, что окно Animation 3D View открыто и отображает сцену с помощью проектной камеры Project Camera.
  • Нажмите закладку ‘Array Manager’. Обратите внимание на два столбца в таблице ‘Objects’; ‘Motion’ и ‘Type’.
  • Введите ‘1’ в первое поле (Ряд 0) в столбце ‘Object Type’. Обратите внимание, что один из примитивов в окне Animation 3D View сменил форму.
  • Введите ‘2’ во втором поле (Ряд 1) в столбце ‘Type’. Обратите внимание, что один из объектов сменил форму.
  • Введите значения для двух других записей на свой вкус. (Примечание: ‘0’ = Куб, ‘1’ = Сфера, ‘2’ = Цилиндр, ‘3’ = Конус).
  • Нажмите закладку ‘Channel Graph’.
  • Перетяните Array Matrix в Граф Каналов и подключите его к каналу Set Matrix. Дважды щелкните на нем, чтобы открыть окно настроек.
  • Из выпадающего списка таблицы ‘Table’, выберите ‘Objects’.
  • Из выпадающего списка столбцов ‘Column’, выберите ‘Motion’.
  • Выберите опцию ‘Update channel name’ (обновить имя канала) и нажмите ‘OK’ для подтверждения.
  • Добавьте Value и подключите его к каналу ‘Objects: Motion’, массиву, который вы только что создали. Переименуйте Value в ‘Current Object’.
  • Перейдите в Раздел Анимации.
  • Нажмите на объект ‘Object Mover’ в списке, чтобы выделить его.
  • Подвигайте ‘Object Mover’ в пространстве. Обратите внимание, что один из примитивов движется вместе с ним.
  • Перейдите в Раздел Каналов.
  • Смените ‘Current Value’ на ‘1’.
  • Перейдите в Раздел Анимации.
  • Нажмите на объект ‘Object Mover’ в списке, чтобы выделить его.
  • Подвигайте ‘Object Mover’ в пространстве. Обратите внимание, что примитив, соответствующий индексу ‘1’ перемещается вместе с ним.
  • Перейдите в Раздел Каналов.
  • Дважды щелкните по каналу ‘Objects Table’, чтобы открыть окно его настроек.
  • Создайте новый столбец, нажав на кнопку ‘Add column’. Назовите этот столбец ‘Texture’.
  • Выберите радио-кнопку ‘Array Channel’ и из выпадающего списка выберите ‘Texture’. Нажмите ‘OK’ для подтверждения.
  • Перетяните Array Channel в граф каналов и подключите его к правильному потомственному входу канала ‘Surface’ объекта ‘Box’.
  • Дважды щелкните по ‘Array Channel’, чтобы открыть его окно настроек. Настройте его так, чтобы он стал ссылкой к столбцу Texture в таблице Objects. Выберите опцию ‘Update channel name’ (обновить имя канала) и нажмите ‘OK’ для подтверждения.
  • Создайте ярлык канала ‘Current Iteration’ и подключите его к каналу ‘Objects: Texture’.
  • Создайте три ярлыка канала ‘Objects: Texture’ и подключите их к правильным потомственным входам каналов ‘Surface’ объектов ‘Sphere’, ‘Cylinder’ и ‘Cone’, соответственно.
  • Нажмите на закладку менеджера массивов Array Manager.
  • В столбце ‘Texture’ в таблице ‘Objects’, дважды щелкните по первому полю, чтобы открыть окно настроек для этой записи. Найдите и загрузите текстуру. (Resources\Textures\Basic). Обратите внимание на окно Animation 3D View, первый объект (‘0’) теперь обладает текстурой.
  • Загрузите текстуры для остальных трех полей. Обратите внимание, что они отображаются в окне Animation 3D View.

Законченная сцена:
..\Tutorials\3.4 – Arrays\Arrays 2 – Complete.cgr

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