android - 在 OpenGL 和分割中滚动/缩放场景

标签 android opengl-es scroll zooming

我们将在 Android 上的 OpenGL ES 中开发一个滚动/缩放场景,非常类似于愤怒的小鸟中的关卡,但更像是粘粘世界中的关卡。更像后者,因为世界不会像《愤怒的小鸟》中那样由重复的图层组成,而是由一张大图像组成。由于场景需要滚动/缩放,因此很多场景将不可见,我想知道实现渲染的最有效方法,只关注环境(即不是世界中的对象,而是背景层)。

我们将使用正交投影。

首先想到的是创建一个世界大小的 4 顶点大矩形,将背景纹理映射到它,然后使用 glTranslatef/glScalef 对其进行平移/缩放。但是,我想知道屏幕边界外的不可见区域是否仍由 OpenGL 渲染,因为它没有被剔除(你会失去可见区域,而且只有 4 个顶点)。因此,分割这个矩形是否更有效,以便剔除不可见的较小矩形?

另一种选择是创建一个填充屏幕的 4 顶点矩形,然后通过调整其纹理坐标来移动背景。但是,考虑到纹理大小限制,我想我们在构建更大的世界时会遇到问题。对于像 AngryBirds 这样的重复背景,这似乎是一个很好的实现。

也许还有另一种方法..?

如果有人对如何在 AngryBirds/World of Goo 中完成它有想法,请分享,我很乐意听到。他们似乎已经实现了一个系统,允许世界非常平滑地移动和缩放 (WorldOfGoo = VERY)。

最佳答案

这可能是 implementation 的最佳选择.

根据我的经验,在内存中保留大纹理在 Android 上非常昂贵。在我移动到平铺之前,我会得到很多背景纹理的 OutOfMemoryError 异常。

我认为最大的渲染瓶颈是内存传输速度和填充率,而不是任何图形计算。

编辑:查看此 presentation 的 53:28来自 Google I/O 2009。

关于android - 在 OpenGL 和分割中滚动/缩放场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057709/

相关文章:

android - 使用 Intents 播放音频文件

Android:动态添加textView。如何将其添加到特定行

jquery - 如何检查网页页面是否滚动?

jquery - 在 Bootstrap 中添加滚动时导航链接不活动

android - IllegalArgumentException:错误的状态类

android - 所有手机都支持 h.264 编码器中的 YUV 420(半)平面颜色格式吗?

c++ - 将 glTexImage2D 保存到文件系统以供检查

iphone - 渲染大量点

ios - OpenGL ES 2.0缩放

c - 我的自定义 ListView 控件中发生了什么导致滚动时部分或完全不重新绘制行?