opengl坐标旋转和平移问题

时间:2022-04-28 10:22:29
我现在在做一个用键盘控制小人跑动的程序,本来是这样设想的:用上下键盘控制前进后退,左右键分别控制左右旋转。现在问题来了:如果我先做平移后做旋转,人物转向是正常的,只不过平移坐标还要根据旋转的角度来计算比较麻烦;如果我先做旋转再做平移,在人物面向位置的向前向后平移变得很简单了(纯粹的只要在X或Y轴上增加值即可),但是问题是人物始终是围绕坐标原点的Z轴旋转,而不是围绕自己旋转。
不知道各位大大们做过想类似的问题没,无限请指教

6 个解决方案

#1


glPushMatrix glPopMatrix行不?

#2


不太明白你说的是什么问题,是说进行了模型变换后,发现模型实际上一直围绕Z轴旋转?
首先,你弄得清楚什么是模型观察矩阵么?
简单的说,就是模型矩阵+观察矩阵
OpenGL默认情况下,观察矩阵和模型矩阵都是位于中心,也就是说,在你不修改观察矩阵的前提下,对模型进行修改,包括另它转动,都最终只能看到它沿某轴转动。
你说,想叫世界围绕人物旋转,那你需要考虑修改观察矩阵才能得到这样的效果。亦或者,你将全部物体置于同一等级的矩阵中,然后以Z轴为中心,对所有物体进行旋转。这样才能得到你想要的效果

#3


引用 2 楼 poisonchry 的回复:
不太明白你说的是什么问题,是说进行了模型变换后,发现模型实际上一直围绕Z轴旋转?
首先,你弄得清楚什么是模型观察矩阵么?
简单的说,就是模型矩阵+观察矩阵
OpenGL默认情况下,观察矩阵和模型矩阵都是位于中心,也就是说,在你不修改观察矩阵的前提下,对模型进行修改,包括另它转动,都最终只能看到它沿某轴转动。
你说,想叫世界围绕人物旋转,那你需要考虑修改观察矩阵才能得到这样的效果。亦或者,……

说错了,确切的说,是把人物置于中心(0,0,0)点,然后所有物体沿Y轴旋转

#4


引用 3 楼 poisonchry 的回复:
引用 2 楼 poisonchry 的回复:

不太明白你说的是什么问题,是说进行了模型变换后,发现模型实际上一直围绕Z轴旋转?
首先,你弄得清楚什么是模型观察矩阵么?
简单的说,就是模型矩阵+观察矩阵
OpenGL默认情况下,观察矩阵和模型矩阵都是位于中心,也就是说,在你不修改观察矩阵的前提下,对模型进行修改,包括另它转动,都最终只能看到它沿某轴转动。
你说,想叫世界围绕人物旋转,那……

谢谢你了,用保存模型矩阵和读取模型矩阵的方法可以做出来。。

#5


LZ已经解决了啊~~~~~一开始学OpenGL的时候的确会被坐标弄昏头,不过这个不弄清楚的话以后就学不了GL了,本来GL就是坐标+颜色的东西(50%)……我现在学GL也学到迷惑了,总感觉进步不了~~~~郁闷,有老师的年代真好

#6


同感啊  进步很慢  要弄明白的东西很多  三维需要空间想象力
引用 5 楼 wjjroy 的回复:
LZ已经解决了啊~~~~~一开始学OpenGL的时候的确会被坐标弄昏头,不过这个不弄清楚的话以后就学不了GL了,本来GL就是坐标+颜色的东西(50%)……我现在学GL也学到迷惑了,总感觉进步不了~~~~郁闷,有老师的年代真好

#1


glPushMatrix glPopMatrix行不?

#2


不太明白你说的是什么问题,是说进行了模型变换后,发现模型实际上一直围绕Z轴旋转?
首先,你弄得清楚什么是模型观察矩阵么?
简单的说,就是模型矩阵+观察矩阵
OpenGL默认情况下,观察矩阵和模型矩阵都是位于中心,也就是说,在你不修改观察矩阵的前提下,对模型进行修改,包括另它转动,都最终只能看到它沿某轴转动。
你说,想叫世界围绕人物旋转,那你需要考虑修改观察矩阵才能得到这样的效果。亦或者,你将全部物体置于同一等级的矩阵中,然后以Z轴为中心,对所有物体进行旋转。这样才能得到你想要的效果

#3


引用 2 楼 poisonchry 的回复:
不太明白你说的是什么问题,是说进行了模型变换后,发现模型实际上一直围绕Z轴旋转?
首先,你弄得清楚什么是模型观察矩阵么?
简单的说,就是模型矩阵+观察矩阵
OpenGL默认情况下,观察矩阵和模型矩阵都是位于中心,也就是说,在你不修改观察矩阵的前提下,对模型进行修改,包括另它转动,都最终只能看到它沿某轴转动。
你说,想叫世界围绕人物旋转,那你需要考虑修改观察矩阵才能得到这样的效果。亦或者,……

说错了,确切的说,是把人物置于中心(0,0,0)点,然后所有物体沿Y轴旋转

#4


引用 3 楼 poisonchry 的回复:
引用 2 楼 poisonchry 的回复:

不太明白你说的是什么问题,是说进行了模型变换后,发现模型实际上一直围绕Z轴旋转?
首先,你弄得清楚什么是模型观察矩阵么?
简单的说,就是模型矩阵+观察矩阵
OpenGL默认情况下,观察矩阵和模型矩阵都是位于中心,也就是说,在你不修改观察矩阵的前提下,对模型进行修改,包括另它转动,都最终只能看到它沿某轴转动。
你说,想叫世界围绕人物旋转,那……

谢谢你了,用保存模型矩阵和读取模型矩阵的方法可以做出来。。

#5


LZ已经解决了啊~~~~~一开始学OpenGL的时候的确会被坐标弄昏头,不过这个不弄清楚的话以后就学不了GL了,本来GL就是坐标+颜色的东西(50%)……我现在学GL也学到迷惑了,总感觉进步不了~~~~郁闷,有老师的年代真好

#6


同感啊  进步很慢  要弄明白的东西很多  三维需要空间想象力
引用 5 楼 wjjroy 的回复:
LZ已经解决了啊~~~~~一开始学OpenGL的时候的确会被坐标弄昏头,不过这个不弄清楚的话以后就学不了GL了,本来GL就是坐标+颜色的东西(50%)……我现在学GL也学到迷惑了,总感觉进步不了~~~~郁闷,有老师的年代真好