предпонятий
Хорошо, так что я собрала так:
- не использовать фиксированный конвейер (не рекомендуется или не рекомендуется)
- vbos хранит "объектные модели" (в основном n данных вершин)
- vaos описывает, как данные располагаются так, чтобы вызовы отрисовки знали, какая часть каждого vbo предназначена для какой информации о вершине (один vao может ссылаться на несколько vbos, обратное довольно сложно)
- каждый вызов отрисовки также отправляет данные вершин в шейдеры
Как я вижу 3D (опционально)
Учитывая эту информацию, я вижу, как хорошо рисовать сложные 3D-объекты в современном OpenGL. В основном вы загружаете кучу объектных моделей (возможно, из Blender или другого подобного программного обеспечения) в VBO с локальными координатами, а затем просто предоставляете для каждого экземпляра объекта свой параметр шейдера (смещение) для рисования в мировом пространстве.
Проблема / вопрос
В 2D проблемы и приоритеты совершенно иные. Вы не рисуете много сложных объектов, вам не нужны сложные проекционные матрицы, а еще много чего проще и шейдеров.
Как лучше всего рисовать часто (действительно часто, в основном, каждый кадр) изменяющуюся геометрию с помощью современного OpenGL?
В следующем параграфе вы можете увидеть некоторые идеи о проблемах (проблема окружности и прямоугольника), которые лучше определяют вид изменений, которые меня интересуют.
Мои попытки (необязательно)
Итак, я начал думать, как мне поступить с рисованием базовой 2D-геометрии на экране:
- квадрат: загрузить
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO для геометрии квадрата в локальном пространстве, затем предоставить шейдеру фактическую ширину квадрата, мировые координаты и информацию о цвете.
остывает, выглядит легко. Давайте перейдем к кругу:
- круг: треугольный веер с ... эх. насколько точность (количество вершин)? для маленьких кругов точность должна быть небольшой, а для кругов с ошибками - высокой. Очевидно, что загрузка 1 VBO не может подходить для всех случаев. Что если мне нужно добавить точность, потому что размер круга увеличен, чтобы он был больше?
Менее круто. Давайте перейдем к чему-то немного более простому, прямоугольнику:
- прямоугольник: да. нет "общей геометрии прямоугольника". У вас просто есть соотношение ширины и высоты, и все, но каждый прямоугольник, вероятно, отличается, если размер изменяется.
Как вы можете видеть, все идет вниз оттуда. Особенно со сложными полигонами и еще много чего.
Нет кода политики: P
Мне просто нужен обзор идеи, код не нужен, особенно код на C или C ++. Просто скажите что-то вроде: «создайте VBO с этими данными вершин, а затем свяжите их, ...».