您好我正试图在VRML上使用Indexed FaceSet。问题是2张面孔没有出现,我真的不知道为什么。
代码是:
Shape {
geometry IndexedFaceSet {
coord Coordinate {
point [0 0 0, #0
0.3 0 0, #1
0 1.2 0, #2
0.3 1.2 0, #3
0 0 -1, #4
0.3 0 -1, #5
0 1.2 -1, #6
0.3 1.2 -1, #7
0.6 1.2 -0.3, #8
0.6 1.2 -0.7] #9
}
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
]
}
appearance Appearance { material Material { diffuseColor 0 0 0.8 }}
}
未出现的双方是最后一方。有什么想法吗?
答案 0 :(得分:2)
首先,必须以逆时针顺序定义每一面以使其可见,因为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
]
}
}