1

我需要创建一个 OpenGL ES 应用程序(最好使用 libGDX),该应用程序显示一个旋转纹理,该纹理在其下方具有某种反射。

我在网上搜索过,发现了一些关于如何在 OpenGL 中进行操作的非常古老的教程。

我想知道在 libGdx 或 Android 上是否有一种简单的方法可以做到这一点,如果我被迫使用 OpenGL 2 而不是 1.x。

有没有在 Java、Android 或 libgdx 中实现纹理反射的教程?


我已经取得了一些小的进展,但我仍然需要更多帮助。

目前显示纹理的代码基于此链接,我已经对其进行了修改,以便显示旋转图像及其反射。

但是,我有一些不好的问题:

  1. 它几乎就像一面完美的镜子。我需要添加某种特殊效果,使其具有某种渐变效果。

  2. 图像可能会相互重叠,并且它们不透明。如果我将反射移动到更靠近旋转图像的位置,我可以看到它们相互重叠。

代码在这里:

public class GlRenderer implements Renderer

@Override
public void onDrawFrame(final GL10 gl)
  {
  gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
  square.draw(gl);
  // draw normal spinning image
  gl.glLoadIdentity();
  gl.glColor4f(1f,1f,1f,1f);
  gl.glTranslatef(0.0f,0.0f,-5.0f);
  gl.glRotatef(rotationAngle++,0.0f,0.0f,1.0f);
  square.draw(gl);
  // draw reflection
  gl.glLoadIdentity();
  gl.glColor4f(0.5f,0.5f,0.5f,1.0f);
  gl.glTranslatef(0.0f,-1.0f,-3.0f);
  gl.glRotatef(-80+180,1.0f,0.0f,0.0f);
  gl.glRotatef(rotationAngle,0.0f,0.0f,1.0f);
  }

有没有人可以帮助我解决这个问题?

4

1 回答 1

1

为了获得完美的效果,您需要做两件事。假设您使用 Image 类来渲染它,首先是将相同的图像放在原始图像下方,并使用 scaleY 将其垂直翻转。

这将创建反射效果,但您需要将应用于第一张图像的相同内容应用于第二张图像,例如移动、旋转,无论您对它做了什么。

除此之外,你可能需要你的反射图像像渐变一样淡出,如果你在一个不移动的纯色背景上做所有事情,你可以创建第三个图像,它是从透明到背景颜色的渐变 png,然后放它在反射图像上。如果您有动态背景,那么您可能需要使用着色器(抱歉,仅限 openGL 2)。您可以在此处阅读有关如何编写自定义着色器的更多信息:http: //blog.josack.com/2011/08/my-first-2d-pixel-shaders-part-3.html(一个很棒的教程)]

希望有帮助。可能还有其他我不知道的解决方案,所以请继续研究,但这就是我想到的。

于 2012-10-13T11:15:38.820 回答