【发布时间】:2019-10-29 15:23:05
【问题描述】:
我正在使用 OpenGL ES 2.0。如果我正在使用简单的 2D 投影,如果我有一个大的 2D 顶点网格,这些顶点几乎是静态的(想想地图图块),其中任何时候只有一小部分是可见的,那会更好。 ..
- 在 CPU 中计算出哪些顶点是可见的,并创建一个 VBO 来仅绘制构成每一帧中可见图块的三角形?
或
- 在整个平铺网格中保留一个静态 VBO,然后仅依靠显卡(在我的情况下为 RPi)剪掉屏幕外的三角形?
或者可能是两者的某种组合(例如重叠的预计算网格集)?在后一个选项变得不可行之前,网格必须有多大?
编辑 我决定多次调用 glDrawElements(),绘制我知道会与视口重叠的索引缓冲区的子范围。在我工作的规模上,它似乎对绘制整个元素数组的速度没有任何影响,即使是在 Pi Zero 上也是如此。
但是,如果涉及网格的任何旋转,这种方法将需要更多的计算来确定需要渲染的元素范围 - 有效地光栅化我自己的四边形。我很想知道这是否是一种合理的方法。
我猜还有其他一些选择,比如更奇特的结构,可以将飞机分解成子区域。不过,仍然不确定这是否真的有必要。
谢谢!
请注意:我不想讨论在片段着色器中绘制图块,我对使用顶点着色器的正确方法更感兴趣,而不是实际解决所描述的问题。
【问题讨论】:
-
这种剔除绝对应该在 CPU 上完成。绘制通常只有一小部分可见的大型整体模型可能会影响性能。
标签: opengl-es-2.0 vertex-shader clip vertex-buffer-objects