Java 获取OpenGL对象旋转
我不会在这里发布我的整个程序,因为它有点太长了。但我有一个渲染器(缩短): 现在我想做的是在“NumberHasbeenDrawed”if语句中获取立方体对象的当前旋转值,这样我就可以创建一个平滑的结束动画来旋转立方体。OpenGL可能正在将所有旋转值保存在一个方便的(几乎不可读)矩阵中,但在谷歌搜索之后,我真的找不到任何关于旋转位置的信息(只是如何开始旋转对象,我已经这样做了)Java 获取OpenGL对象旋转,java,android,opengl-es,matrix,rotation,Java,Android,Opengl Es,Matrix,Rotation,我不会在这里发布我的整个程序,因为它有点太长了。但我有一个渲染器(缩短): 现在我想做的是在“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);
}