Android openGL对象在转换和旋转的同时

时间:2012-04-03 10:54:04

标签: android opengl-es

使用Android opengl我需要将对象从A点移动到B点,并在同一时间围绕其局部Z轴旋转它。我一直在阅读过去3天的教程,每个人都会给你一些信息和提示,但没有人能够从头到尾为初学者解释这一点。

我知道如何只将对象从A点转换为B点。 我也知道如何围绕其局部轴旋转点A中的对象(将其转换为原点,旋转它,将其转换回来) 我不知道如何在同一时间旋转和翻译。

我试图转换为原点,旋转,平移,然后转换为B点。它不起作用,我想我知道为什么(旋转是弄乱对象轴,所以转换为B点)是不正确的)

A(-x1, y1 , -z1)
B(-x1 + deltaX, y1 + deltaY, -z1 + deltaZ)
_gl.glTranslatef(x1, -y1 , z1);         
_gl.glRotatef(degrees, x1, -y1 , z1);                               
_gl.glTranslatef(-x1, y1 , -z1);
_gl.glTranslatef(deltaX, deltaY, deltaZ);

我需要考虑旋转轴的方式。有人说我可以使用四元数或旋转矩阵等来做到这一点。 但是我没有足够的opengl知识来使用apis来解决这个问题。

有人可以向我解释一下吗?有些代码吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您有以下代码:

glTranslate(x, y, z);
glRotatef(angle, 0, 0, 1);
drawObject();

首先围绕它的局部z轴旋转对象,然后用(x, y, z)进行平移。最接近绘制调用的转换调用是首先发生的调用。

从您的代码中看起来您实际上并不想围绕它自己的原点旋转对象,但是其他一些点,在这种情况下您应该执行以下操作:

glTranslate(x, y, z);                         //Transform 4
glTranslate(origin.x, origin.y, origin.z);    //Transfrom 3
glRotatef(angle, 0, 0, 1);                    // Transform 2 
glTranslate(-origin.x, -origin.y, -origin.z); // Transform 1
drawObject();