VRML проиндексированный FaceSet - PullRequest
1 голос
/ 27 февраля 2011

Привет. Я пытаюсь создать тело с помощью Indexed FaceSet на VRML. Проблема в том, что 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 }}
                }

2 не появляющиеся стороны являются последними. Есть мысли?

1 Ответ

2 голосов
/ 27 февраля 2011

Во-первых, каждая сторона должна быть определена против часовой стрелки, чтобы быть видимой, потому что 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
        ]
    }
}
...