Как разрешить углы в 180 градусов в X3DOM IndexedFaceSet - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь создать простую плоскую 2D-фигуру в X3DOM, но, поскольку координаты генерируются автоматически, некоторые из них находятся на прямой линии, и в этом случае 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), но я не могу легко изменить это в моем сценарии (реальные фигуры гораздо больше комплекс)

1 Ответ

1 голос
/ 09 июня 2019

Прежде всего, размещенный вами фрагмент x3d был искажен:

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

Во-вторых, ваш IndexedFaceSet использует только первые 4 координаты узла Coordinate:

coordIndex='0 1 2 3'

И первые 4 точки образуют только прямую линию, которая невидима как грань (область 0, нечего визуализировать). Изменения только Z:

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

Но после добавления всех точек к coordIndex IndexedFaceSet и установки 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>

Надеюсь, это поможет:)

...