Я написал утилиту SpriteBatch, которая может совместно использовать спрайты и визуализировать их, используя GL_TRIANGLES (6 вершин на спрайт). Я также хотел бы иметь возможность рисовать другие примитивы, такие как GL_LINES, используя аналогичный метод. Как мне собрать эту другую геометрию вместе? Было бы неплохо иметь классы пакетов для каждого из этих типов?У меня есть SpriteBatch, но как насчет дозирования геометрии?
ответ
Для любого примитивного типа, который не подключен (например, GL_TRIANGLE_STRIP
, GL_TRIANGLE_FAN
), вы можете упаковать столько независимых геометрий, сколько хотите, в один и тот же буфер и нарисовать их за один раз, при условии, что матрицы, цвета, текстуры и т. Д. Являются одна и та же. Если у вас есть подмножества, которые нужно визуализировать по-разному, вы все равно можете собрать все геометрии в один и тот же буфер, а затем использовать glDrawRangeElements
, чтобы отображать только часть в то время.
Если вам нужен более конкретный ответ, вам нужно уточнить, что вы пытаетесь сделать.
Уточнение относительно «несвязанных независимых геометрий»: Это применимо только в том случае, если вы действительно хотите отобразить все геометрии за один раз. Вы все равно можете собрать все геометрии вершин для любого примитивного типа (т. Е. Даже GL_TRIANGLE_FAN
) в том же буфере, а затем просто отобразить правильный диапазон буфера с помощью glDrawRangeElements
.
Пример: Вы хотите, чтобы ro отображал треугольник с четырьмя вершинами (A, B, C, D) и треугольник из трех вершин (E, F, G). Вы могли бы построить свои буфера следующим образом:
- буфер вершин: [А, В, С, D, Е, F, G]
- индекса буфер: [0, 1, 2, 3, 4, 5, 6]
Затем, чтобы сделать вентилятор треугольник, вы назвали бы
glDrawRangeElements(GL_TRIANGLE_FAN, 0, 3, 4, GL_UNSIGNED_INT, 0);
и нарисовать треугольник, вы назвали бы
glDrawRangeElements(GL_TRIANGLES, 4, 6, 3, GL_UNSIGNED_INT, 0);
Я думаю, что это также стоит отметить, что вы можете добиться расширенного дозирования с геометрическим инстансом, созданным с помощью AKA рендеринга. Проверьте ссылки: 1, 2.
С геометрическим instancing вы можете не только упаковать несколько объектов в один VB, но и нарисовать их все с помощью одного вызова рисования.
- 1. У меня есть модели/контроллеры, но как мне обрабатывать представления?
- 2. У меня проблемы с моей программой геометрии
- 3. Expression.New (..) - но у меня уже есть объект
- 4. У меня есть javascript для jQuery у меня есть ошибка
- 5. FileNotFoundException: ENOENT ... но, но, но у меня есть файл
- 6. У меня есть java.lang.ArrayIndexOutOfBoundsException
- 7. У меня есть sql-запрос, но как остальные
- 8. node.js У меня есть программа, но как запустить
- 9. Eclipse предупреждает меня, что у меня есть
- 10. У меня есть функция-функция
- 11. У меня есть изображения в
- 12. Почему у меня есть замок?
- 13. У меня есть сценарий SQL
- 14. У меня нет Microsoft.SqlServer.ManagedDTS.dll, но
- 15. У меня есть недопустимые аргументы
- 16. У меня есть запрос jquery
- 17. У меня есть jmeter botleneck?
- 18. Почему у меня есть stackoverflow
- 19. У меня есть письмо Div
- 20. У меня есть Многомерный массив
- 21. У меня есть вопрос .. добавляющий
- 22. Почему у меня есть NullReferenceException?
- 23. У меня есть программа C#
- 24. Как проверить, есть ли у меня транзакция?
- 25. у меня есть проблемы запроса
- 26. Сколько ядер у меня есть?
- 27. У меня есть несколько вопросов
- 28. Как у меня есть более одной переменной?
- 29. Почему LibGDX SpriteBatch использует треугольники вместо квадов?
- 30. У меня есть сообщение об ошибке OverQuotaError, но у меня достаточно квоты
Вы, похоже, сильно ударили по голове. Я хотел упаковать их все в один VBO, но я быстро отклонил это, потому что я не думал, что можно было отобразить некоторых с GL_TRIANGLES, некоторые с GL_LINES, а затем еще с GL_TRIANGLES. Мне нужно будет проверить glDrawRangeElements. – Dooskington
Имейте в виду, что по производительности не обязательно лучше иметь один огромный буфер вершин (хотя наличие тонны крошечных буферов также неэффективно). Возможно, вам захочется прочитать, например http://www.opengl.org/wiki/Vertex_Specification_Best_Practices – smani