首页 > 其他 > 详细

OpenGL中的旋转是可以叠加的?

时间:2015-12-14 21:01:00      阅读:171      评论:0      收藏:0      [点我收藏+]

OpenGL中的旋转是可以叠加的?

 

1. opengl中的旋转

  如:glrogtate(45.0f, 0, 0, 1),是将当前坐标系顺时针旋转45度,然后绘制,

  程序如下:

 1   int randium = 80;
 2     float lineColor[] = {1.0f, 1.0f, 0.0f};
 3     midPoint_1P8Circle(randium, lineColor);
 4     
 5     //glPushMatrix();
 6     glRotatef(45.0f, 0, 0, 1);//旋转45度
 7     midPoint_1P8Circle(randium, lineColor);
 8     //glPopMatrix();
 9     
10     //glPushMatrix();
11     glRotatef(90.0f, 0, 0, 1);//旋转45度
12     midPoint_1P8Circle(randium, lineColor);
13     //glPopMatrix();
14     
15     //glPushMatrix();
16     glRotatef(135.0f, 0, 0, 1);//旋转45度
17     midPoint_1P8Circle(randium, lineColor);
18     //glPopMatrix();

  程序分析:

  (1)因为没有添加glPushMatrix(), 和 glPopMatrix(),所以每一次旋转都会产生相应的旋转矩阵。从而导致最终的旋转结果进行叠加处理。

  (2)glPushMatrix(), 和 glPopMatrix(),所的作用是,保存当前坐标系,并重新建立一个初始模型视图MoldView的变换矩阵,后面的旋转不影响前面的的绘制。

  (3)每一次的旋转,在同一个坐标系下面,即在同一层此上的glPushMatrix(), 和 glPopMatrix(),中间的所有模型处理,旋转只影响该函数后面的模型绘制。

  通过以上分析,即可以解释产下属现象的原因,从本质上来讲,产生这种现象也是必然的。如果相应的添加glPushMatrix(), 和 glPopMatrix(),取消前面的注释,通过1/8最小化的分圆部分,绘制出如下的旋转圆,如右图所示。

  技术分享  技术分享

OpenGL中的旋转是可以叠加的?

原文:http://www.cnblogs.com/icmzn/p/5046394.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!