前概念
好的,到目前为止,我收集的是:
- 不要使用固定的管道(已弃用或将要弃用)
- vbos存储“对象模型”(主要是n个顶点数据)
- vaos描述了如何放置数据,以便绘图调用知道每个vbo的哪一部分是关于哪种顶点信息的(一个vao可以引用多个vbo,相反则有点困难)
- 每个绘制调用还将顶点数据发送到着色器
我如何看待3D(可选)
有了这些信息,我可以看到使用现代OpenGL绘制3D复杂对象的效果如何。您基本上是将一堆对象模型(可能来自Blender或其他类似软件)加载到具有局部坐标的VBO中,然后只需为对象的每个实例提供不同的着色器参数(偏移量)即可绘制到世界空间。
问题/问题
但是,在2D中,问题和优先级完全不同。您不需要绘制很多复杂的对象,也不需要复杂的投影矩阵,并且着色器和着色器要简单得多。
用现代OpenGL频繁(实际上经常,基本上每帧)绘制变化的几何形状的最佳方法是什么?
在下面的段落中,您可以看到一些问题的想法(圆形和矩形问题),可以更好地识别我感兴趣的更改类型。
我的尝试(可选)
因此,我开始考虑如何处理在屏幕上绘制基本的2D几何:
- 正方形:
[(1, 0), (1, 1), (0, 1), (0, 0)]
在局部空间中为正方形的几何图形加载VBO,然后为着色器提供正方形的实际宽度以及世界坐标和颜色信息
冷却,看起来很容易。让我们转到一个圆圈:
- 一个圆圈:三角形风扇。精度(顶点数)多少?对于小圆圈,精度必须较低,对于错误环,精度必须较高。显然,加载1个VBO可能无法满足所有情况。如果由于圆的大小被调整为更大而需要增加精度怎么办?
不太酷。让我们移动到稍微容易一点的矩形:
- 矩形:嗯。没有“常规矩形几何体”。您只需要一个宽度/高度比例即可,但是,如果尺寸改变,每个矩形可能会有所不同。
如您所见,事情从那里走下坡路。特别是对于复杂的多边形等等。
无代码政策:P
我只需要一个大概的想法,不需要任何代码,尤其是C或C ++代码。就像这样说:“使用此顶点数据创建一个VBO,然后将其绑定,...”。