我正在尝试使用IndexedFaceSet制作一个中间有一个窗口的墙模型,我不知道如何实现它。
这是我的代码:
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 1.0 1.0 1.0
}
texture ImageTexture {
url "textures/stone.jpg"
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-5.0 0.0 -1.0, -2.5 0.0 0.0,
2.5 0.0 0.0, 5.0 0.0 -1.0,
5.0 4.0 -1.0, 2.5 4.0 0.0,
-2.5 4.0 0.0, -5.0 4.0 -1.0,
]
}
texCoord TextureCoordinate {
point [
0.0 0.0, 0.7 0.0, 0.7 0.7, 1.3 0.7,
1.3 0.0, 2.0 0.0, 2.0 1.0, 0.0 1.0
]
}
coordIndex [ 0, 1, 2, 3, 4, 5, 6, 7 ]
convex FALSE
solid FALSE
}
}
这是一间小屋的墙。我想,我需要在中间另一个IndexedFaceSet作为墙上的洞,或者在我的情况下作为玻璃窗。 这是一个学校项目。
谢谢
答案 0 :(得分:1)
VRML具有很强的建模能力,但是,VRML浏览器主要不是为了计算任何对象布尔设置操作,而是为了解决它们的叠加和放大。应用其他视觉属性来创建场景视图
因此,构建模型必须依靠自己的几何体进行一些简单的转换(旋转/平移),但没有任何实体建模代数
(Shape_A
+ Shape_B
作为联合操作的例子(又名"胶水"固体形状在一起)不可能)
(Shape_A
- Shape_B
作为减法操作的示例(又名"钻取"形状等于Shape_B
的洞到{{1}的正文中(从_A中移除材料)也不可能)
是的,在VRML中有一些对象层次结构用于一些更智能的对象分组,但是这些不会创建一种方法来为窗口创建一个洞,也不会创建一个具有玻璃材质属性的框(不透明度,反射性)等等,不在视觉上渲染场景图,以透明地显示从墙上的窗口看时所看到的全景图。
如果没有不可逆转地固定到Shape_A
,可以从四个部分(一个leftSideBox,一个bottomBaseBox,一个rightSideBox和一个upperLintelBox)创建一个单独的墙,作为一种装配或砌砖,所有这些盒子并排排列,形成一面墙,同时也围绕着#34;预定玻璃窗的自由空间。
原则上,这种四框方法(并且省略了它们各自接触平面上的相邻面)被分解成一组平凡的表面三角形,可以作为一种简单的方法来组装相同的通过{{1 }}。然而,对于这些中的每一个的3D坐标的编码将是相当繁琐的(如果不使用具有VRML输出的任何实体建模软件生成器)。
是的,对这些小平面进行纹理处理是另一个难以解决的复杂程度,无论多么简单,都要比制作一个只显示墙壁石头的玻璃窗更加简单。
要使面部正确显示,重要的是保持2D面正常矢量指向"外面" 3D体(角落必须以逆时针顺序编号,以便右手指沿着ccw方向和拇指点向外" - 在从ccw定义的边缘开始的方向上2D-facette。
IndexedFaceSet{}
asHtml
IndexedFaceSet{}