我在 C++ 中使用 OpenGL(技术上是 EGL,在 Jetson Nano 上。)
假设我想画 N 个四边形。想象一下只是一个彩色矩形列表。框架中可能有几千个这样的矩形。
我想使用两个顶点缓冲区:
- 一个定义每个四边形的几何图形。
- 一个定义每个四边形共有的属性。
第一个顶点缓冲区应该定义每个四边形的几何形状。它应该只有 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 个顶点。
我该怎么办?