Есть ли какая-либо точка в использовании индексного буфера со структурой в OpenGL ES (Android)?

С IE у Вас есть onpaste

С Mozilla, который можно изучить с одним входом, и

elementReference.addEventListener("DOMCharacterDataModified", function(e){ foo(e);}, false);

Там не легко как решение для круга.

Eric

5
задан Tom Martin 21 September 2009 в 20:21
поделиться

1 ответ

1) Мне дали понять, что в OpenGL ES координаты текстуры отображаются только в буфер вершин, а не в индексный буфер.

Верно, координаты текстуры - это относительно данных вершины (либо в буфере, либо в пространстве процессора) НЕ индексных данных. Механизм индекса не зависит от текстурирования.

Предположим, у вас есть этот массив вершин, состоящий из 3 вершин (по 3 компонента в каждой):

float vdata[] = {x0,y0,z0, x1,y1,z1, x2,y2,z2};

и этот массив texcoord, состоящий из 3 координат (по 2 компонента в каждой):

float tdata[] = {u0,v0,    u1,v1,    u2,v2};

Когда объявляя эти данные в OpenGL, вы связываете вершину 0 (x0, y0, z0) с координатой текстуры 0 (u0, v0), вершину 1 с координатой текстуры 1 и так далее. В конце он отобразит на вашем треугольнике, состоящем из 3 вершин / 3 координат текстуры, соответствующую часть текстуры.

Вот традиционное изображение OpenGL, но для многоугольника с четырьмя вершинами.

alt text
(источник: glprogramming.com )

Индексные данные (буферизованные или нет) - это способ указания вершин косвенно, а не последовательно. В моем предыдущем примере, если я хотел бы визуализировать треугольник дважды, я бы указал массив индексов следующим образом:

unsigned int idata[] = {0,1,2, 0,1,2};

Итак, для ответа на 1) данные индекса не зависят от texcoords или других атрибутов вершин, таких как цвета, нормали и т. Д. следовательно, нет смысла связывать texcoords с данными индекса.

2) В конце концов, чтобы правильно сопоставить текстуры, нужно будет записать буфер вершин со всей избыточностью, которая была бы сохранена с буфером индекса. . Нужно ли еще увеличить производительность или индексные буферы избыточны для текстурированных данных?

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

Конечно, если вы возьмете трехмерный куб, никакие вершины не будут использовать одни и те же текскорды или нормали, но это не репрезентативная модель! Я считаю, что большинство сеток в приложениях для игр / САПР представляют собой непрерывные поверхности с большим количеством избыточных вершин и получают большую пользу от индексации.

Во-вторых, при наличии индексов графический процессор может использовать кеши до и после вершин для ускорения рендеринга . Что касается пропускной способности памяти, наличие индексов почти бесплатно, потому что графический драйвер помещает их в память pci-express (DMA) и поэтому не съедает пропускную способность видеопамяти.

В общем, я не думаю, что это ] плохая вещь для производительности с использованием индексных буферов, даже если у вас мало повторений вершин, но, как обычно, вам следует проверять различные реализации OpenGL и проводить свои собственные тесты.

11
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: