读书人

先gltranslatef 然后glrotatef为什么得

发布时间: 2012-04-12 15:46:35 作者: rapoo

先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(); 

读书人网 >C++

热点推荐