Полигональные сетки
Color {
exposedField MFColor color []
}
Этот класс используется только при описании сложной геометрии (IndexedFaceSet) и задает множество RGB шветов для многоугольников (flat shading) или вершин многоугольников (smooth shading). Объекты этого класса не могут появляться внутри объекта Appearance.
Coordinate {
exposedField MFVec3f point []
}
Этот класс используется только при описании сложной геометрии (IndexedFaceSet) и задает множество вершин многоугольников.
IndexedFaceSet {
eventIn MFInt32 set_colorIndex
eventIn MFInt32 set_coordIndex
eventIn MFInt32 set_normalIndex
eventIn MFInt32 set_texCoordIndex
exposedField SFNode color NULL
exposedField SFNode coord NULL
exposedField SFNode normal NULL
exposedField SFNode texCoord NULL
field SFBool ccw TRUE
field MFInt32 colorIndex []
field SFBool colorPerVertex TRUE
field SFBool convex TRUE
field MFInt32 coordIndex []
field SFFloat creaseAngle 0
field MFInt32 normalIndex []
field SFBool normalPerVertex TRUE
field SFBool solid TRUE
field MFInt32 texCoordIndex []
}
Наиболее сложный тип геометрии - набор многоугольников. Зато этот класс позволяет создавать геометрические объекты произвольной формы. Очень часто используется в VRML файлах.
Поле coord содержит координаты всех вершин описываемого множества многоугольников. Здесь должен находиться объект Coordinate.
Поле coordIndex определяет геометрию множества (сам набор многоугольников). Пример:
IndexedFaceSet {
coord Coordinate { point [0 0 0, -1 1 1, 2 2 2, -3 3 3, 4 -4 4, 5 5 5] }
coordIndex [0, 1, 2, 3, -1, 1, 2, 4, 5,- 1]
}
определяет 2 четырехугольника с вершинами 0 0 0, -1 1 1, 2 2 2, -3 3 3 и -1 1 1, 2 2 2, 4 -4 4, 5 5 5. Т.е. в coordIndex
указываются индексы вершин из coord, которые должны составить многоугольник и -1 как признак конша описания данного многоугольника и перехода к следующему. Индексы вершин, как вы видите в примере, начинаются с 0.
В поле color должен содержаться объект класса Color, задающий швета:
(один швет на многоугольник, т.е. имеет место быть flat shading):
IndexedFaceSet {
coord Coordinate { point [0 0 0, -1 1 1, 2 2 2, -3 3 3, 4 -4 4, 5 5 5] }
coordIndex [0, 1, 2, 3, -1, 1, 2, 4, 5,- 1]
colorPerVertex FALSE
color Color { color [0 0 0, 1 1 1] }
colorIndex [1, 0]
} # 2-й четырехугольник будет черного швета, а первый
# белого.
# Если не указать colorIndex, то наоборот.
(один швет на вершину, smooth shading)
соответствует индекс швета этой вершины в colorIndex, а -1 в coordIndex
соответствует -1 в colorIndex. Пример правильного описания:
IndexedFaceSet {
coord Coordinate { point [0 0 0, -1 1 1, 2 2 2, -3 3 3, 4 -4 4, 5 5 5] }
coordIndex [0, 1, 2, 3, -1, 1, 2, 4, 5,- 1]
colorPerVertex TRUE
color Color { color [0 0 0, 1 1 1] }
colorIndex [ 0, 1, 0, 1, -1, 1, 0, 0, 1, -1]
} # получится довольно красиво
Остальные поля этого класса не заслуживают подробного рассмотрения.