2012-04-03 44 views
0

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

我知道如何只从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); 

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

有人可以向我解释这个吗?还有一些代码?

预先感谢您。

+0

我不认为我完全理解你正在尝试做什么。请告诉我们更多关于你想要达到的效果 - 在这种旋转/翻转效果的现实世界中是否有类比?你是在制作动画呢,还是一次性的永久性操作?我认为,如果你只是glLoadIdentity(),然后旋转,然后翻译,这应该在这种情况下.. – manmal 2012-04-03 11:01:10

+0

这篇文章的第一句话说:“我需要移动一个对象从A点到B点并旋转它它的本地Z轴在同一时间“。实时类比是这样的:我有一架飞机,它的鼻子里有一个螺旋桨。螺旋桨是一个独立的物体,需要围绕其本地z轴旋转,同时与飞机进行平移。我知道如何只翻译螺旋桨,我也知道如何在飞机不移动的时候只旋转螺旋桨,但在同时旋转和平移时,螺旋桨会采取意想不到的轨迹。 – 2012-04-03 17:55:15

+0

会起作用吗?:跟踪某些变量的全局翻译;当绘制“螺旋桨”时:glLoadIdentity,旋转,本地翻译(飞机上螺旋桨的位置),全球翻译(飞机位置)。 – manmal 2012-04-03 18:34:53

回答

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(); 
+0

“最接近绘图调用的变换调用是最先发生的变换调用”。这是我在过去3天阅读论坛中学到的最有价值的信息。我所有的电话都必须以相反的顺序。它像一个魅力。非常感谢 – 2012-04-03 19:33:49