先gltranslatef 然后glrotatef为什么得到的结果是这样?该如何处理

先gltranslatef 然后glrotatef为什么得到的结果是这样?


画那个绿色的正方形:

glLoadIdentity();
glTranslatef(0,2.5,0);
glRotatef(45,0,0,1); 
DrawUnitBox(GREEN);

glRotatef(45,0,0,1); 不是绕原点旋转吗? 应该转到坐标 y 轴的左边去了? 怎么会是绕正方形的中心旋转?

谢谢

------解决方案--------------------
因为 OpenGL 施加操作的顺序与你给出操作的顺序刚好相反。具体到主楼的程序,实际上是先旋转,再移动。
------解决方案--------------------
可能有些不符合直觉吧,但也并不是很难理解。
这样设计的原因在于支持独立建模。大型工程中,不可能一次性构造场景,通常的做法都是对各个局部进行单独建模,建模的时候都是在模型局部坐标系中完成的,这种操作可以封装在一个函数或者类中。如果 OpenGL 选择摄影变换施加顺序与程序语句顺序相同,那么假如有一个函数负责画多组建连接的机械手臂 (draw_mechanical_arm),然后具体调用的上下文像这样,
C/C++ code

glTranslate(x,y,z);
glRotate(degree,dx,dy,dz);
draw_mechanical_arm();