nul*_*ull 5 android opengl-es graphic
我有一张图片:background.png。如何使用 android OpenGL ES 或 AndEngine 库或您知道的其他技术创建连续重复滚动的背景图像?
例子:

目前,我使用两个相邻图像技术。我加载图像(background.png)两次并将它们相邻放置,然后移动它们。所以它看起来就像是一张连续滚动的图像。
但是,不知何故,我认为仅使用一个图像实例可能会有更好的解决方案。有谁可以分享一下吗?
更新:
对于好奇的人来说,这是两个相邻图像的代码(使用 AndEngine 库):
movingBackgroundSprite.registerEntityModifier(new LoopEntityModifier(
new MoveYModifier(10, -CAMERA_HEIGHT, 0)));
movingBackgroundSprite2.registerEntityModifier(new LoopEntityModifier(
new MoveYModifier(10, 0, CAMERA_HEIGHT)));
Run Code Online (Sandbox Code Playgroud)
上面的代码是关于重复制作背景图像并从上到下垂直滚动。
注意:
* movingBackgroundSprite 是加载background.png 图像的Sprite 类。您可以看到背景精灵有两个实例。
* registerEntityModifier -> 为 Sprite 应用修改器/行为
* LoopEntityModifier -> 循环行为
* MoveYModifier -> 按 y 位置移动行为。第一个参数是持续时间(您可以忽略它,因为它与问题无关),第二个参数是源 Y 位置,第三个参数是目标 Y 位置。
* CAMERA_HEIGHT -> 定义背景图像高度的常量。
如果你已经设置了glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)(我认为这是默认设置),你可以只绘制一个全屏四边形并s以小步增量增加纹理坐标(如果你想要的话,它也可以垂直工作)。
大于 1.0 的值将环绕到纹理的左侧,无需额外操作。而且,不需要两次绘制调用。
你没有说你有 ES 1.0 还是 2.0,但如果是 2.0,你可以将偏移量作为统一传递,并将其添加到着色器中的纹理坐标,这比每次更改顶点数据(texcoord)更有效框架。尽管是每帧一次,但它可能并不重要,它可能只是相同的。
编辑:
我不知道 AndEngine,可能有更简单、更方便的命令来绘制纹理全屏四边形...但给定“OpenGL ES 1.0”,使用立即模式并假设默认 MVP 矩阵,这可能看起来像这样举一个非常粗略的例子:
glBindTexture(GL_TEXTURE_2D, cloudy_sky_texture);
glTexImage(...);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
...
float offset = 0.0f;
while(!quit)
{
offset += 1.0f/texture_size;
glBindTexture(GL_TEXTURE_2D, cloudy_sky_texture);
glBegin(GL_QUADS);
glVertex2f(-1.0f, -1.0f);
glTexCoord2f(0.0f + offset, 0.0f);
...
glVertex2f(1.0f, 1.0);
glTexCoord2f(1.0f + offset, 1.0f);
glEnd();
DrawForegroundStuff();
}
Run Code Online (Sandbox Code Playgroud)
为了简洁省略了一些行,立即模式不太好,还有很大的优化空间,但原理应该很清楚。您实际上只需绘制一个四边形并增加s纹理坐标的分量即可。
| 归档时间: |
|
| 查看次数: |
5386 次 |
| 最近记录: |