在OpenGL ES 2 2D中剔除屏幕外对象

问题描述 投票:1回答:1

我正在使用OpenGL ES 2.0。如果我使用的是简单的2D投影,如果我有一个很大的静态2D顶点网格(想想地图贴图),而在任何时候都只有一小部分可见,那会更好。 ..

  • 在CPU中计算出哪些顶点是可见的,并创建一个VBO以仅绘制构成每一帧中可见图块的三角形?

  • 将静态VBO与整个平铺网格保持在一起,然后仅依靠图形卡(在我的情况下为RPi)来裁剪出屏幕外的三角形?

或者也许是两者的某种组合(如重叠的预先计算的网格集)?在后一个选项不可行之前,网格必须有多大?

编辑我决定对glDrawElements()进行多次调用,绘制我知道会与视口重叠的索引缓冲区的子范围。以我正在研究的规模,即使在Pi Zero上,绘制整个元素数组的速度似乎也没有任何区别。

但是,如果涉及到网格的任何旋转,则此方法将需要进行更多的计算才能确定需要渲染哪些元素范围-有效地栅格化自己的四边形。我很想知道这是否是一种合理的方法。

我想,还有其他一些选择,例如更奇特的结构,可以将飞机分成子区域。仍然不确定是否真的有必要。

谢谢!

[请注意:我不想讨论片段着色器中的绘制图块,与真正解决上述问题相比,我对使用顶点着色器的正确方法更感兴趣。

我正在使用OpenGL ES 2.0。如果我使用的是简单的2D投影,则如果我有一个很大的2D顶点网格,这些顶点几乎是静态的(请考虑地图贴图),其中只有很小的比例...

opengl-es-2.0 vertex-shader clip vertex-buffer-objects
1个回答
0
投票

如果是常规网格,则将其拆分为大块,因此屏幕宽度(较大的一侧)将适合2-3个这样的块。如果是常规网格,则不需要重叠。

© www.soinside.com 2019 - 2024. All rights reserved.