VRML. Справка по языку

Полигональные сетки


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, задающий швета:


  • если colorPerVertex == FALSE

    (один швет на многоугольник, т.е. имеет место быть flat shading):


  • если не указано поле colorIndex, то швета на многоугольники, определенные в поле coordIndex, назначаются просто по порядку следования их описаний. (первому описанному многоугольнику соответствует первый швет из поля color, и т.п.);


  • если colorIndex указан, то швета на многоугольники назначаются по индексам, указанным в 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 FALSE

    color Color { color [0 0 0, 1 1 1] }

    colorIndex [1, 0]

    } # 2-й четырехугольник будет черного швета, а первый

    # белого.

    # Если не указать colorIndex, то наоборот.

  • если colorPerVertex == TRUE

    (один швет на вершину, smooth shading)


  • если colorIndex отсутствует, то швета для вершин, указанных в coord, выбираются по порядку из вектора значений color;


  • если colorIndex указан, то он должен соответствовать по форме полю coordIndex, т.е. индексу вершины в coordIndex

    соответствует индекс швета этой вершины в 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]

    } # получится довольно красиво

    Остальные поля этого класса не заслуживают подробного рассмотрения.


    Содержание раздела