第六講 堆疊操作

ingenuus發表於2007-11-12
本節中的例子其結構和例1一樣,僅改變myDisplay和myReshape。

  例4:利用堆疊繪製三個物體--一個綠色的茶壺,一個藍色的茶壺,一個紅色的立方體(部分程式碼)

void myDisplay(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 /*藍色茶壺*/
 glPushMatrix();
 glColor3f(0.0,0.0,1.0);
 glutSolidTeapot(1.5);
 glPopMatrix();

 /*紅色立方體*/
 glPushMatrix();
 glTranslatef(5.0,0.0,0.0);//座標變換
 glColor3f(1.0,0.0,0.0);
 glutSolidCube(1.0);
 glPopMatrix();

 /*綠色茶壺*/
 glPushMatrix();
 glTranslatef(-5.0,0.0,0.0);//座標變換
 glColor3f(0.0,1.0,0.0);
 glutSolidTeapot(1.0);
 glPopMatrix();

 glFlush();
}

void myReshape(GLsizei w,GLsizei h)
{
 glViewport(0,0,w,h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(80.0,(GLdouble)w/(GLdouble)h,1.0,20.0);//建立透視投影矩陣
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 glTranslatef(0.0,0.0,-8.0);
}

   執行後,我們可以看到左邊為一個綠色的茶壺,中間為藍色的茶壺,右邊為紅色的立方體,如圖四。現在我們註釋掉所有的glPushMatrix(); glPopMatrix();執行後我們會發現兩個茶壺重疊在一起,如圖五。這是因為glPushMatrix();glPopMatrix();使得坐 標轉換的原始座標都是最初始的座標。而將glPushMatrix(); glPopMatrix()註釋掉後,glTranslatef(5.0,0.0,0.0); glTranslatef(-5.0,0.0,0.0);兩行語句使得綠色茶壺回到了(0,0)就和藍色的茶壺重疊在一起。

  除此之外還有很多堆疊操作,需要用時可以通過查MSDN或網路或有關書籍。

點選放大此圖片
圖四:三個不重疊的物體

點選放大此圖片
圖五:兩個茶壺重疊在一起
 

相關文章