Я использую OpenGL в C ++ (технически EGL, на Jetson Nano.)
Допустим, я хочу нарисовать N Quads. Представьте себе список цветных прямоугольников. В кадре может быть несколько тысяч таких прямоугольников.
Я хочу использовать два буфера вершин:
- Один, который определяет геометрию каждого четырехугольника.
- Тот, который определяет свойства, общие для каждого четырехугольника.
Первый буфер вершин должен определять геометрию каждого четырехугольника. В нем должно быть только 4 вершины, а его данные будут просто углами четырехугольника. Что-то вроде:
0, 0, // top left
1, 0, // top right
0, 1, // bottom left
1, 1, // bottom right
Тогда второй буфер вершин должен иметь только x, y, width, height всех прямоугольников.
x1, y1, width1, height1, color1,
x2, y2, width2, height2, color2,
x3, y3, width3, height3, color3,
x4, y4, width4, height4, color4,
x5, y5, width5, height5, color5,
x6, y6, width6, height6, color6,
... etc.
Дело в том, что каждый изэлементы в моем буфере прямоугольника должны применяться к 4 вершинам в буфере вершин.
Есть ли способ настроить это так, чтобы он продолжал многократно использовать одни и те же 4 вершины четырехугольника для каждого прямоугольника и применял один и тот же прямоугольниксвойства для 4 вершин одновременно?
Я представляю, что я могу что-то сделать, чтобы я сказал, что первый буфер вершин должен использовать один элемент на каждую вершину и обтекать, но второй буфер вершин использует один элементна каждые четыре вершины или что-то в этом роде.
Как мне это настроить?
Что я делаю сейчас:
Сейчас мне нужен один буфер вершин, который просто имеетчетыре вершины повторяются снова и снова столько раз, сколько у меня есть экземпляры.
0, 0, // (1) top left
1, 0, //
0, 1, //
1, 1 //
0, 0, // (2) top left
1, 0, //
0, 1, //
1, 1, //
0, 0, // (3) top left
1, 0, //
0, 1, //
1, 1, //
... etc
И мой второй буфер дублирует свои данные для каждой вершины:
x1, y1, width1, height1, color1,
x1, y1, width1, height1, color1,
x1, y1, width1, height1, color1,
x1, y1, width1, height1, color1,
x2, y2, width2, height2, color2,
x2, y2, width2, height2, color2,
x2, y2, width2, height2, color2,
x2, y2, width2, height2, color2,
x3, y3, width3, height3, color3,
x3, y3, width3, height3, color3,
x3, y3, width3, height3, color3,
x3, y3, width3, height3, color3,
x4, y4, width4, height4, color4,
x4, y4, width4, height4, color4,
x4, y4, width4, height4, color4,
x4, y4, width4, height4, color4,
x5, y5, width5, height5, color5,
x5, y5, width5, height5, color5,
x5, y5, width5, height5, color5,
x5, y5, width5, height5, color5,
x6, y6, width6, height6, color6,
x6, y6, width6, height6, color6,
x6, y6, width6, height6, color6,
x6, y6, width6, height6, color6,
... etc.
Это кажется действительно неэффективно, и я просто хочу указать первые 4 вершины один раз, и он будет продолжать их как-то повторно, вместо того, чтобы дублировать эти 4 вершины N раз, чтобы в моем первом буфере было в общей сложности 4 * N вершин. И я хочу указать атрибуты x, y, width, height, color только один раз для каждого четырехугольника для общего количества N вершин, и , а не один раз для каждой общей вершины для в общей сложности 4 * N вершин.
Что мне делать?