Что такое "узлы" (nodes)

Изложение моих познаний об узлах состоит из фактов (перевод фрагментов спецификации VRML, англоязычных tutorial'ов и т.д.) и субъективных представлений. НО (!) в чем-то при изложении я могу оказаться неправ. Все-таки описание узлов - это теория, а я, скорее, практик. При этом по-русски мне придется изъясняться, как получится, т.к. насколько мне известно, устоявшегося перевода терминов VRML на русский пока нет.
Узел (node) - базовый компонент в описании VRML сцены, по сути дела сцена - это НАБОР УЗЛОВ.
- ОФОРМЛЕНИЕ УЗЛОВ. Грубо говоря, узлы записываются как пара скобок ([] или {}) с указанием, что с содержимым скобок сделать. Предельный по простоте случай - узел Group {}, который только группирует в себе другие узлы. Это как арифметические действия: можно записать ((2+2)*(2+2)), а можно (2+(2*2)+2) и результат изменится.
- ВИДЫ УЗЛОВ.
(I) По способности содержать в себе другие узлы (т.е. быть внешними объединяющими скобками) или быть содержимым для других узлов все они делятся на:
1) grouping nodes (эти являются ВНЕШНИМИ по отношению к другим узлам, т.е. содержат в себе ДРУГИЕ узлы, которые называются children см п.2)). Каждый grouping node создает локальную систему координат для всех children узлов, которые он содержит, и задает для них общее свойство, т.е. например:
--------------------------------------------------------------
Anchor { children[
...тут может быть указана куча children узлов...
]}
--------------------------------------------------------------
Так вот, ко всей совокупности children узлов, содержащихся в Anchor{children[...]} привязан этот самый Anchor(якорь)
Вот grouping узлы - Anchor, Billboard, Collision, Group, Inline, LOD, Switch, Transform
Еще одна особенность grouping узлов - наличие таких eventIn, как addChildren и removeChildren, что позволяет добавлять/удалять children узлы из списка
2) children nodes (эти МОГУТ, но НЕ ОБЯЗАНЫ находится ВНУТРИ grouping узлов). Т.е. например узел Shape может и сам по себе находиться в тексте файла, а может и внутри, например, Transform.
Вот children узлы - Anchor, Background, Billboard, Collision, ColorInterpolator, CoordinateInterpolator, CylinderSensor, DirectionalLight, Fog, Group, Inline, LOD, NavigationInfo, NormalInterpolator, OrientationInterpolator, PlaneSensor, PointLight, PositionInterpolator, ProximitySensor, ScalarInterpolator, Script, Shape, Sound, SpotLight, SphereSensor, Switch, TimeSensor, TouchSensor, Transform, Viewpoint, VisibilitySensor, WorldInfo
(!) Обратите внимание, что ВСЕ grouping nodes входят в число children nodes! Но не наоборот!
Т.е. может быть:
--------------------------------------------------------------
Transform {
Transform{
Transform{
здесь, например, NavigationInfo {}
}}}
--------------------------------------------------------------
и НЕ может быть:
--------------------------------------------------------------
Transform{
NavigationInfo {
Transform{}
}}
--------------------------------------------------------------
Внутри children node (NavigationInfo {}) узлу Transform{} не место !
3) не относящиеся к п.1) и п.2) Это
а) узлы объектов Box, Cone, Cylinder, ElevationGrid, Extrusion, IndexedFaceSet, IndexedLineSet, PointSet, Sphere, Text
б) узлы, которые могут находиться в ОПРЕДЕЛЕННОМ поле ОПРЕДЕЛЕННОГО узла
Узел Узел, внутри которого он может находится Поле
Appearance Shape appearance
AudioClip Sound source
Color ElevationGrid color
  IndexedFaceSet color
  IndexedLineSet color
Coordinate IndexedFaceSet coord
  IndexedLineSet coord
  PointSet coord
FontStyle Text fontStyle
ImageTexture Appearance texture
Material Appearance material
MovieTexture Appearance texture
  Sound source
Normal ElevationGrid normal
  IndexedFaceSet normal
PixelTexture Appearance texture
TextureCoordinate ElevationGrid texCoord
  IndexedFaceSet texCoord
TextureTransform Appearance textureTransform
(II) Еще способ классификации узлов - по сходству механизма работы
а) узлы-сенсоры (Anchor, Collision, CylinderSensor, PlaneSensor, ProximitySensor, SphereSensor, TimeSensor, TouchSensor, VisibilitySensor) - это узлы, генерирующие EventOut (сообщение о том, что произошло некоторое событие) при определенном воздействии на них. Делятся на:
- environmental sensors ("сенсоры обстановки" - мой вольный перевод) - Collision, ProximitySensor, TimeSensor, VisibilitySensor активируются при перемещении по виртуальному миру
- pointing-device sensors - Anchor, CylinderSensor, PlaneSensor, SphereSensor, TouchSensor - реагируют на манипуляции мышкой и другими подобными устройствами
б) узлы-интерполяторы - ColorInterpolator, CoordinateInterpolator, NormalInterpolator, OrientationInterpolator, PositionInterpolator, ScalarInterpolator - задают способ ИЗМЕНЕНИЯ каких-либо свойств объекта (цвет, положение, ориентацию и т.д.). При этом задаются ключевые значения изменяемых свойств (поля key и keyValue), а все промежуточные точки вычисляются (ИНТЕРПОЛИРУЮТСЯ) броузером.
в) узлы, зависящие от времени - AudioClip, MovieTexture, TimeSensor - могут активировать/деактивировать сами себя в определенные моменты времени