-1

我不会在这里发布我的整个程序,因为它有点太长了。但我有这个渲染器(缩短):

     class OpenGLRenderer implements Renderer {

    private CubicPolygon cube;

    public OpenGLRenderer(Context context) {

        this.context = context;
        cube = new CubicPolygon();
    }

public void onDrawFrame(GL10 gl) {

    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glLoadIdentity();

    gl.glTranslatef(0.0f, 0.0f, -9.0f);
    gl.glScalef(0.8f, 0.8f, 0.8f);

    // If it's just a regular rotation
    if (!numberHasBeenDrawn) {
      gl.glRotatef(getXRotation(rotatingOfDOOMFire), 1, 0, 0);
      gl.glRotatef(getYRotation(rotatingOfDOOMFire), 0, 1, 0);
      gl.glRotatef(getZRotation(rotatingOfDOOMFire), 0, 0, 1);
    }

    // If there is a chosen one (number that is)
    if (numberHasBeenDrawn) {

      gl.glRotatef(xAnimation(number), 1, 0, 0);
      gl.glRotatef(yAnimation(number), 0, 1, 0);

    }
    gl.glFinish();
    cube.draw(gl);

  }

现在我想做的是在“numberHasBeenDrawn”if 语句中获取该立方体对象的当前旋转值,这样我就可以创建一个平滑的结束动画来旋转立方体。OpenGL 可能将所有旋转值保存在一个方便(几乎不可读)的矩阵中,但经过一番谷歌搜索后,我真的找不到关于 WHERE 的任何信息(只是如何最初旋转一个对象,我已经这样做了)。

// 编辑:如果您想查看更多代码以帮助我,请继续询问,这并不是什么秘密,我也可以发布它;)

4

1 回答 1

1

您应该自己在程序中的某个地方缓存旋转值。通常不鼓励从 OpenGL API 读取状态和值,并且可能会很慢,因为它破坏了 API 允许的流水线(出于性能原因,将 GPU 与 CPU 分离)。

于 2013-01-30T21:41:12.303 回答