2015-03-25 199 views
0

因此,目前我正在为我的课程工作制作一个基于飞行火箭的想法的游戏,我花了太多时间思考它背后的物理原理,我完全忽略让它正确移动。 例如,当我要绘制顶部指向天空的圆锥体时,我将其旋转到X轴上,但是如果我在Y轴上平移它,它将在全局Y轴上移动,而不是在其本地坐标上系统将使Y轴指向圆锥顶部。 我的问题是openGL有一个本地坐标系统,还是我必须以某种方式创建自己的转换矩阵,如果有的话,我该怎么做。OpenGL在基于旋转的局部坐标系上转换一个对象

的方式我做的变换和旋转如下:

glPushMatrix(); 
    glTranslatef(llmX, llmY + acceleration, llmZ); 
    glRotatef(rotX, 1.0f, 0.0f, 0.0f); 
    glRotatef(rotY, 0.0f, 0.0f, 1.0f); 
    drawRocket(); 
glPopMatrix(); 

这里是一个更好的图片说明我的意思是希望提供一个更好的解释。 enter image description here

编辑:我发现它真的很奇怪,旋转似乎一个接一个地工作,如果我在X轴上旋转一次,然后继续在Z轴上旋转它从已旋转X轴代替世界X轴。

希望有人能帮助我理解这一点,真的需要得到它为我的项目工作。 谢谢。

回答

1

如果您正在使用平移矩阵向上移动(即沿正Y方向移动),无论您在矩阵堆栈中还是在转换过程中,都将移动正Y中的顶点方向。

如果你不是想它以旋转的方向移动的话,建议沿Y轴第一翻译,然后再旋转到你想要的角度。本质上,以相反的方式推动矩阵。

+0

这确实有效,一旦它旋转了,它就会在旋转的轴上变换,但它不会围绕它自己的轴旋转,而且看起来好像绕着(0,0,0)世界坐标旋转,如果以某种方式旋转将围绕它自己的轴旋转,一切都将被解决。 – 2015-03-25 10:22:59

+0

@MichaelCross是的,即使对象从原点平移,所有旋转都发生在0,0,0附近。为了围绕自己的轴旋转,在进行任何平移之前应用旋转,而轴位于原点。 – Thomas 2015-03-26 01:32:05

+0

花了很长时间回到它,仍然有相同的问题尝试了一些方法来做运动和旋转,我仍然无法让它正常工作......要么它自己的轴旋转,但翻译全局轴或它在全局轴上旋转但在本地轴上移动。 – 2015-04-08 21:56:46

相关问题