我是 OpenGL ES 2.0 的新手,它具有可编程管道,我正在移植使用不同纹理渲染许多对象的应用程序。 那么这将需要为每个对象调用 glDrawArrays 并在调用之间更改纹理?或者还有另一种方法可以通过单个 glDrawArrays 调用来绘制具有不同纹理的多个对象?
我这么问是因为我注意到,当尝试使用 glDrawArrays 而不是使用“桌面”OpenGL 的 glBegin/glEnd 时,对 glDrawArrays 进行多次调用要慢得多。
我正在渲染 map 图 block ,因此所有纹理都不同,它们是动态加载的(不能像加载一次一样花费太多时间处理它们)并且也很大(最大 512x512)。
最佳答案
不幸的是,没有一种简单的内置方法可以在单批 glDrawArrays
调用中应用多个纹理。然而,有一些方法可以让它发挥作用。最常见的策略之一被称为纹理图集。基本上,这个想法是将许多图像组合在一起形成一个更大的纹理,每个子图像占据纹理的已知子矩形。当您将它们映射到基元上时,您可以提供与要显示的图像相对应的子矩形的坐标。
纹理图集适用于很多情况,但设置起来相对复杂。如果您不必为每个对象执行不同的纹理,那么首先要尝试的就是简单地将尽可能多的使用相同纹理的基元批处理在一起。
如果您没有使用 OpenGL ES,如果您的纹理大小相同,您也可以考虑使用纹理数组。
关于opengl-es - OpenGL ES 2.0 中许多具有不同纹理的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230009/