opengl-es - OpenGL ES 2.0 中许多具有不同纹理的对象

标签 opengl-es opengl-es-2.0

我是 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/

相关文章:

iphone - iOS 上 OpenGL ES2.0 中的多纹理点 Sprite ?

ios - CVImageBuffer带有额外的列填充。我该如何修剪?

Android RenderScript 与 OpenGL ES 着色语言的关系

java - 安卓OpenGL ES 2.0 : Setting Unique Colors for Objects with same Fragment Shader

c - Linux opengl es 2.0 来自 windows

android - 在openGL android中将图像纹理渲染到立方体贴图中

opengl-es-2.0 - 构建 Cg 程序的正确方法是什么?

opengl-es - 如何在 OpenGL ES 应用程序中指定立方体每边的颜色?

android - 什么是 glVertexAttribPointer 数据

C++ OpenGL ES 2.0 矩阵变换——新手