首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-12 
先gltranslatef 然后glrotatef为什么得到的结果是这样?画那个绿色的正方形:glLoadIdentity()glTranslatef

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

热点排行