Во-первых, каждая сторона должна быть определена против часовой стрелки, чтобы быть видимой, потому что IndexedFaceSet
объекты являются односторонними, если вы не используете solid FALSE
, поэтому некоторые грани в вашей модели выглядят так, как будто они отсутствуют, новместо этого они фактически видны с другой стороны.
Решение 1: твердое ЛОЖЬ
Грани видны с обеих сторон, поэтому это не имеет значенияесли они были определены по часовой стрелке или против часовой стрелки.Это простой взлом, но он удваивает количество полигонов, которые визуализирует зритель внутри.
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0 0 0.8
}
}
geometry IndexedFaceSet {
solid FALSE
coord Coordinate {
point [0 0 0, 0.3 0 0, 0 1.2 0, 0.3 1.2 0, 0 0 -1 0.3 0 -1, 0 1.2 -1, 0.3 1.2 -1, 0.6 1.2 -0.3, 0.6 1.2 -0.7]
}
coordIndex [
6 7 9 8 3 2 -1,
0 1 5 4 -1,
1 5 9 8 -1,
0 1 3 2 -1,
4 5 7 6 -1,
0 4 6 2 -1,
3 1 8 -1,
7 5 9 -1
]
}
}
Решение 2: перевернуть ошибочные грани
Обратноепорядок вершин для конкретных граней, которые должны быть перевернуты.
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0 0 0.8
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [0 0 0, 0.3 0 0, 0 1.2 0, 0.3 1.2 0, 0 0 -1 0.3 0 -1, 0 1.2 -1, 0.3 1.2 -1, 0.6 1.2 -0.3, 0.6 1.2 -0.7]
}
coordIndex [
2 3 8 9 7 6 -1, # flipped
4 5 1 0 -1, # flipped
1 5 9 8 -1,
0 1 3 2 -1,
6 7 5 4 -1, # flipped
2 6 4 0 -1, # flipped
3 1 8 -1,
9 5 7 -1 # flipped
]
}
}