Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 仅向1个方向移动OpenGL模型_Xcode_Cocoa_Opengl_3d - Fatal编程技术网

Xcode 仅向1个方向移动OpenGL模型

Xcode 仅向1个方向移动OpenGL模型,xcode,cocoa,opengl,3d,Xcode,Cocoa,Opengl,3d,在我的OpenGL场景中,我有一个0,0,0的固定摄像头,还有一个模型。 模型被平移和旋转,并希望将其移动到相机的右侧。但是,如果我平移到x,它将平移到模型的x,而不是摄影机的x。 如何克服这种情况?更改调用glRotate和glTranslate的顺序。首先旋转,然后平移,看起来就像是移动相机一样。首先平移,然后旋转,看起来就像是在看一张桌子,它绕着它的轴旋转,模型在上面。谢谢,但我认为我的顺序是正确的。基本上我先平移,然后旋转。这里我使用了一个捕捉鼠标事件的函数,如果鼠标向右移动,我想将模型

在我的OpenGL场景中,我有一个0,0,0的固定摄像头,还有一个模型。 模型被平移和旋转,并希望将其移动到相机的右侧。但是,如果我平移到x,它将平移到模型的x,而不是摄影机的x。
如何克服这种情况?

更改调用
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
。任何时候:)。我得调查一下,我的想象力受到了伤害^^