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最小化的分圆部分,绘制出如下的旋转圆,如右图所示。