Введение
Полигонная сетка, состоящая из треугольников В компьютерной графике треугольная сетка является типом сетки многоугольников. Он состоит из множества треугольников (обычно трехмерных), которые соединены общими краями или вершинами. Многие графические программные пакеты и аппаратные устройства могут работать более эффективно на треугольниках, сгруппированных в сетки, чем на аналогичном количестве треугольников, представленных отдельно. Это обычно происходит потому, что компьютерная графика выполняет операции на вершинах в углах треугольников. С отдельными треугольниками система должна работать на трех вершинах для каждого треугольника. В большой сетке может быть восемь или более треугольников, встречающихся на одной вершине, обрабатывая эти вершины только один раз, можно сделать часть работы и достичь идентичного эффекта. Во многих компьютерных графических приложениях необходимо управлять сеткой треугольников. Компоненты сетки - вершины, края и треугольники. Для применения может потребоваться знание различных соединений между компонентами сетки. Эти соединения могут управляться независимо от фактических позиций вершин. В этом документе описывается простая структура данных, которая удобна для управления соединениями. Это не единственная возможная структура данных. Существует много других типов, которые поддерживают различные запросы о сетчатых сетках.
In computer graphics, a triangle mesh is a type of polygon mesh. It comprises a set of triangles (typically in three dimensions) that are connected by their common edges or vertices. Many graphics software packages and hardware devices can operate more efficiently on triangles that are grouped into meshes than on a similar number of triangles that are presented individually. This is typically because computer graphics do operations on the vertices at the corners of triangles. With individual triangles, the system has to operate on three vertices for every triangle. In a large mesh, there could be eight or more triangles meeting at a single vertex by processing those vertices just once, it is possible to do a fraction of the work and achieve an identical effect. In many computer graphics applications it is necessary to manage a mesh of triangles. The mesh components are vertices, edges, and triangles. An application might require knowledge of the various connections between the mesh components. These connections can be managed independently of the actual vertex positions. This document describes a simple data structure that is convenient for managing the connections. This is not the only possible data structure. Many other types exist and have support for various queries about meshes.
Представительство
Различные методы хранения и работы с сеткой в памяти компьютера возможны. С помощью OpenGL и DirectX API существует два основных способа передачи треугольной сетки в графическое оборудование, треугольные полосы и индексные массивы.
Треугольная полоса
Один из способов передачи данных о вершинах между треугольниками - треугольная полоса. С полосами треугольников каждый треугольник имеет один полный край с одним соседом и другой с следующим. Другой способ - треугольный вентилятор, который представляет собой набор связанных треугольников, имеющих одну центральную вершину. С помощью этих методов вершины обрабатываются эффективно, в результате чего необходимо обрабатывать только N + 2 вершины, чтобы нарисовать N треугольников. Треугольные полосы эффективны, однако недостаток заключается в том, что может быть не очевидно, как или удобно перевести произвольную треугольную сетку в полосы.
Колапс краев
Эта операция включает в себя определение края hvk, vti, где vk называется вершиной удержания, а vt называется вершиной броска. Треугольники, которые разделяют этот край, удаляются из сетки. Вершина vt также удаляется из сетки. Любые треугольники, которые разделяют vt, имеют вершину, замененную vk. На рисунке 1 показана треугольная сетка и последовательность трех краев, приложенных к сетке.
Массив индексов
С индексными массивами, сетка представлена двумя отдельными массивами, один массив, содержащий вершины, и другой, содержащий множества из трех индексов в этом массиве, которые определяют треугольник. Графическая система обрабатывает вершины сначала и затем воспроизводит треугольники, используя индексные наборы, работающие с преобразованными данными. В OpenGL это поддерживается примитивной glDrawElements при использовании Vertex Buffer Object (VBO). С помощью этого метода любой произвольный набор треугольников, разделяющих любое произвольное количество вершин, может быть сохранен, обработан и передан графическому API без какой-либо промежуточной обработки.