如何在 X3DOM IndexedFaceSet 中允许 180 度角

How to allow 180 degree angles in X3DOM IndexedFaceSet

我试图在 X3DOM 中制作一个简单的平面 2D 形状,但由于坐标是自动生成的,其中一些坐标在一条直线上,在这种情况下 X3DOM 似乎失败了。下面是一个简单的例子。我在这里做错了什么?

<X3D width='800px' height='600px'>
<Scene>
<Viewpoint description='Front view' orientation='0 1 0 1.57' position='8 0 0'/> 
<Shape DEF='Front'>
<IndexedFaceSet coordIndex='0 1 2 3' solid='false', convex='false'>
<Coordinate DEF='Points' point='
1 1 1
1 1 2
1 1 3
1 1 4
2 1 4
2 1 3
2 1 2
2 1 1
1 1 1'/> 
</IndexedFaceSet>
<Appearance>
<Material diffuseColor="0 0 1" specularColor=".5 .5 .5" DEF="edgecolour" />
</Appearance>

</Shape> </Scene>
</X3D> 

如果我剪掉中间的 4 个点(1 1 3、1 1 4、2 1 4、2 1 3),效果很好,但我无法在我的脚本中轻松更改它(实际形状是复杂得多)

首先,您发布的 x3d 片段格式不正确:

<IndexedFaceSet coordIndex='0 1 2 3' solid='false', convex='false'>
                                                  ^

其次,您的 IndexedFaceSet 仅使用 Coordinate 节点的前 4 个坐标:

coordIndex='0 1 2 3'

而前4个点只构成一条直线,作为面是不可见的(面积为0,不渲染)。只有 Z 变化:

1 1 1
1 1 2
1 1 3
1 1 4

但是在将所有点添加到 IndexedFaceSetcoordIndex 并将 convex 设置为 true 之后,我的 X3D 查看器能够呈现蓝色矩形:

<?xml version="1.0" encoding="UTF-8"?>
<X3D>
    <Scene>
        <Viewpoint description='Front view' orientation='0 1 0 1.57' position='8 0 0'/> 
        <Shape DEF='Front'>
            <IndexedFaceSet coordIndex='0 1 2 3 4 5 6 7' solid='false' convex='true'>
                <Coordinate DEF='Points' point='
                1 1 1
                1 1 2
                1 1 3
                1 1 4
                2 1 4
                2 1 3
                2 1 2
                2 1 1
                1 1 1'/> 
            </IndexedFaceSet>
            <Appearance>
                <Material diffuseColor="0 0 1" specularColor=".5 .5 .5" DEF="edgecolour" />
            </Appearance>
        </Shape>
    </Scene>
</X3D>

希望对您有所帮助:)