Xcode 仅向1个方向移动OpenGL模型
在我的OpenGL场景中,我有一个0,0,0的固定摄像头,还有一个模型。 模型被平移和旋转,并希望将其移动到相机的右侧。但是,如果我平移到x,它将平移到模型的x,而不是摄影机的x。Xcode 仅向1个方向移动OpenGL模型,xcode,cocoa,opengl,3d,Xcode,Cocoa,Opengl,3d,在我的OpenGL场景中,我有一个0,0,0的固定摄像头,还有一个模型。 模型被平移和旋转,并希望将其移动到相机的右侧。但是,如果我平移到x,它将平移到模型的x,而不是摄影机的x。 如何克服这种情况?更改调用glRotate和glTranslate的顺序。首先旋转,然后平移,看起来就像是移动相机一样。首先平移,然后旋转,看起来就像是在看一张桌子,它绕着它的轴旋转,模型在上面。谢谢,但我认为我的顺序是正确的。基本上我先平移,然后旋转。这里我使用了一个捕捉鼠标事件的函数,如果鼠标向右移动,我想将模型
如何克服这种情况?更改调用
glRotate
和glTranslate
的顺序。首先旋转,然后平移,看起来就像是移动相机一样。首先平移,然后旋转,看起来就像是在看一张桌子,它绕着它的轴旋转,模型在上面。谢谢,但我认为我的顺序是正确的。基本上我先平移,然后旋转。这里我使用了一个捕捉鼠标事件的函数,如果鼠标向右移动,我想将模型向右移动。我怎么能这么做?谢谢您需要保留一些实例变量,以跟踪模型向右移动的程度,例如GLdouble offsetX
。现在,每当鼠标向右移动时,增大偏移量,如果向左移动,则减小偏移量。如果不连续设置动画,则还需要在鼠标移动时触发重画。在绘图功能中,将offsetX
添加到translation命令:glTranslated(offsetX,…)
。这就是我实际拥有的。但是,当我增加offsetX时,模型将沿其自身的X轴移动,而不是相机的X轴移动。。。我做错了什么?谢谢。这真的很奇怪,也许我想不到。无论如何,你可以在平移时用手来补偿旋转。对于X坐标,使用glTranslated(offsetX*cos(rotrad),0,offsetX*sin(rotrad)+),而不是使用offsetX
,其中,rotrad
是以弧度为单位的模型旋转,通过rotrad=rotdeg/180.0*M_PI
从度数中获得。您可能需要交换正弦和余弦以使其工作,并可能使其成为-rotrad
而不是rotrad
。任何时候:)。我得调查一下,我的想象力受到了伤害^^