Поля
Каждое поле имеет тип и может принимать только значения определенного типа. Вообще говоря, существует 2 основных типа значений: одиночные значения и значения-векторы. Соответственно имена типов начинаются с SF (single) или MF (multiple). Запись значений-векторов следующая:
[<значение1>, ... <значениеN>, ]
Последняя запятая (перед закрывающей скобкой) может быть опущена. Если вектор содержит только одно значение, то и сами скобки ( [ ] ) могут быть опущены. Следующие записи эквивалентны:
[1,]
[1]
1
Далее приводится (неполный) список типов (Note: имена типов будут использоваться далее при записи формальной спешификашии классов. См. секшию "Список классов") При определении объекта имена типов параметров не указываются - чего и следовало ожидать, так как типы всех полей уже указаны в описании класса.
SFBool
Логический тип. Значения - TRUE и FALSE.
SFColor / MFColor
Цвет. Значение SFColor - запись швета в формате RGB - (0 0 0 - черный, 111 - белый).
SFFloat / MFFloat
Значение(я) с плавающей точкой.
SFInt32 / MFInt32
Целые значение(я).
SFString / MFString
Строка (строки). Пример:
"This is a string"
SFVec2f / MFVec2f
Двумерный вектор. Примеры:
1.5 3.5 # SFVec2f
[ 1.5 3.5, 2 4,] # MFVec2f
Обратите внимание на отсутствие запятой в SFVec2f (!).
SFVec3f / MFVec3f
3-мерный вектор. Запись значений аналогична.
SFRotation / MFRotation
Спешиальный тип данных, его значения задают вращение. Вращение описывается 4 числами, разделенными пробелами (табуляшиями, переводами строк, но не запятыми). Первые три числа задают вектор (ось вращения) - желательно нормированный. 4-е число - угол в радианах, определяет величину правостороннего вращения вокруг оси. Таким образом задается поворот системы координат, направление взгляда наблюдателя и т.п. (см. "Индекс классов").
SFNode / MFNode
Тип-объект позволяет создавать иерархические структуры объектов; т.е. такие структуры, где одни объекты являются родителями других. Пример:
Transform { # преобразование системы координат
translation 2 2 2 # перенос СК
children [ # вектор потомков
Shape { # геометрическая фигура
geometry Sphere { radius 2 }
}
Shape { # обратите внимание - в векторе
# объектов запятые
# ставить необязательно
geometry Cone { }
}
]
}
Теперь если изменить translation, то можно легко переместить оба объекта.
(sic! Преимущество определения локальных систем координат).