Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取OpenGL对象旋转_Java_Android_Opengl Es_Matrix_Rotation - Fatal编程技术网

Java 获取OpenGL对象旋转

Java 获取OpenGL对象旋转,java,android,opengl-es,matrix,rotation,Java,Android,Opengl Es,Matrix,Rotation,我不会在这里发布我的整个程序,因为它有点太长了。但我有一个渲染器(缩短): 现在我想做的是在“NumberHasbeenDrawed”if语句中获取立方体对象的当前旋转值,这样我就可以创建一个平滑的结束动画来旋转立方体。OpenGL可能正在将所有旋转值保存在一个方便的(几乎不可读)矩阵中,但在谷歌搜索之后,我真的找不到任何关于旋转位置的信息(只是如何开始旋转对象,我已经这样做了) //编辑:如果你想看到更多的代码来帮助我,请继续问,这其实不是什么秘密,我也可以发布;) 您应该将旋转值自己缓存在程

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

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


//编辑:如果你想看到更多的代码来帮助我,请继续问,这其实不是什么秘密,我也可以发布;)

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

您所说的“获取旋转值”是什么意思?您首先指定了它们,之后GL确实将它们转换为矩阵。您可以分解生成的矩阵,但我怀疑这并不是您真正想要的。好的想法是从OpenGL获取旋转值(到目前为止,我使用的一些框架具有类似“object.getRotation()”的函数)因为旋转是由三个独立的函数在三个轴上完成的,会有点混乱…嗯,我想你是对的。我真的没有想到tbh。但是谢谢
     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);

  }