How to move/rotate an object in OpenGL according to it's local position / rotation
进入Pc++和OpenGL,来自Python背景,在那里你有Apple运动和Apple旋转(当然,世界定位,世界定位),我觉得我错过了OpenGL的东西。基本上,我有一个球员,一个立方体。
我希望立方体能用上/下箭头键前后移动,始终保持它所面对的位置。然后,使用左/右箭头,我希望玩家围绕自己的原点旋转。所以我将以一个古老的居民邪恶的控制方案(坦克控制)结束。
现在,gltransfe和glrotate起作用,但取决于我先做什么,它似乎朝着正确的方向移动,但绕着世界原点旋转。
或
它绕着它自己的轴旋转,但移动总是根据世界轴。
我不想移动/旋转世界或世界+摄像头,因为我想做第三人固定摄像头游戏。基本上,我希望做的与Python中的applymvement/applyrotation完全相同。但我对如何实现这一目标持开放态度。
由于使用即时模式进行渲染,首先需要gltranslate对象中心的负矢量,应用旋转,然后gltranslate返回其位置。有效地:
1 2 3 | glTranslate( -center.x, -center.y, -center.z ); glRotate( ... ); glTranslate( center.x, center.y, center.z ); |
现在,这只适用于渲染部分。对于移动,您需要跟踪立方体旋转的角度,并使用正弦和余弦将其向前或向后移动。