OpenGL: эффективный способ представить пакет геометрии?

потому что count является терминальной операцией, и потоки вызываются / исполняются только тогда, когда присутствует терминальный; говорят, что они ленивы ...

Просто обратите внимание, что в java-9 и выше ваш пример не будет печатать эти утверждения из map в любом случае, поскольку все, что вас волнует, это , сколько и map бесполезно. ..

12
задан Menno 28 January 2009 в 11:03
поделиться

2 ответа

Прежде всего необходимо, вероятно, использовать VBO все время. Для маленьких и больших объектов.

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

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

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

Таким образом, если Вы имеете, например, две полосы с одним треугольником каждый, для в общей сложности шести вершин.

Исходные треугольные индексы полос были бы:

1) 0, 1, 2
2) 0, 1, 2

Теперь Вы присоединяетесь ко всем вершинам вместе, таким образом, Вы заканчиваете с 6 вершинами.

1) 0, 1, 2 (unchanged)
2) 3, 4, 5

К настоящему времени у Вас есть один массив вершины, но все еще две отдельных полосы. Должны присоединиться к ним путем вставки вырожденных треугольников:

1) 0, 1, 2, 2, 2, 3, 4, 5

(Я думаю, что вышеупомянутое корректно, но на самом деле не проверило),

Идея - это: с вышеупомянутой полосой видеокарта вытянула бы треугольники из этих вершин:

0, 1, 2
1, 2, 2 <- degenerate! won't be drawn
2, 2, 2 <- degenerate! won't be drawn
2, 2, 3 <- degenerate! won't be drawn
3, 4, 5

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

16
ответ дан 2 December 2019 в 19:56
поделиться

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

1
ответ дан 2 December 2019 в 19:56
поделиться
Другие вопросы по тегам:

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