Что такое VertexIndices в webgl? - PullRequest
       16

Что такое VertexIndices в webgl?

3 голосов
/ 17 декабря 2011

Я изучаю WebGL с этого сайта: http://learningwebgl.com/blog/?p=370

Я не понимаю, что такое VertexIndices и почему в пирамиде их нет?

1 Ответ

9 голосов
/ 18 декабря 2011

При определении геометрии для вашего трехмерного объекта, есть два основных элемента, с которыми вы работаете: вершины и треугольники.Вершина - это просто позиция в пространстве, определенная координатами XYZ (и обычно некоторой дополнительной информацией, например, координатами текстуры), а треугольник - это всего лишь три вершины.

Определение вершин довольно просто.Обычно вы просто предоставляете список позиций примерно так:

[
    1.0, 2.0, 3.0, // vertex 0
    4.0, 5.0, 6.0, // vertex 1
    7.0, 8.0, 9.0, // vertex 2
    // etc..
]

Итак, теперь вопрос в том, как из этого сделать треугольники?Самый простой способ - просто сказать, что каждый набор из трех вершин неявно является одним треугольником (поэтому массив выше определит один треугольник).Это легко, потому что не требует никакой дополнительной информации, вы просто предоставляете вершины по три, а оборудование делает все остальное.Это называется неиндексированной геометрией, и это метод, который пирамида использует в учебнике, с которым вы связались.

Проблема заключается в том, что в большинстве моделей несколько треугольников будут иметь одну и ту же вершину.Подумайте о углу куба: есть как минимум три треугольника, которым нужно будет использовать одну и ту же точку.С неиндексированной геометрией вам нужно будет просто скопировать информацию для этой вершины в вашем массиве три раза.Это не очень эффективно, и для больших сложных сеток у вас будет много избыточных данных.Мы можем исправить это с помощью Indexed Geometry.

С индексированной геометрией вы определяете каждую вершину в вашей сетке только один раз, а затем предоставляете второй массив целых чисел, который индексирует в вашем массиве вершин и в основном «соединяет точки» с указаниемваша видеокарта, точки которой составляют треугольники.

[
    0, 1, 2, // Triangle 0, uses vertices 0, 1, and 2
    3, 2, 1, // Triangle 2, uses vertices 3, 2, and 1
    // etc...
]

Это намного эффективнее, экономит память и, как правило, быстрее рендерится.Это метод, который куб использует в учебном пособии.

Оба метода работают отлично, и оба имеют сценарии, в которых они являются лучшим выбором, но обычно вы увидите, что большинство профессиональных приложений используют индексированную геометрию из-заболее низкое использование памяти.

Это все проясняет?

...