带窗口的VRML墙

时间:2013-11-26 04:16:08

标签: vrml

我正在尝试使用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作为墙上的洞,或者在我的情况下作为玻璃窗。 这是一个学校项目。

谢谢

1 个答案:

答案 0 :(得分:1)

构建正确的VRML模型

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{}