1. 主題:階層移動
2. 旋轉 Rotate
3. 實作:T-R-T
4. 複習:矩陣
-------------------------------------------------------------------------------------------------------------------------
◎複習期中考題(矩陣):
glPushMatrix( ); ///備份矩陣
glTranslatef(x,y,z); ///移動
glRotatef(角度,x,y,z); ///旋轉
glScalef(x,y,z); ///縮放
glBegin(GL_POLYGON); ///開始畫
glNormal3f(nx,ny,nz); ///打光法向量
glTexCoord2f(tx,ty); ///貼圖座標
glColor3f(R,G,B); ///顏色
glVertex3f(x,y,z); ///頂點
glEnd( ); ///結束化
glPopMatrix( ); ///還原矩陣
◎兩個茶壺旋轉
void display( )
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix( ) ; ///備份起來
glRotatef( mouseX , 0 , 0 );
glColor3f(1,0,0); ///紅色
glutSolidTeapot( 0.3 );
glPushMatrix( ) ; ///掛上去
glTranslatef( 0.5 , 0.14 , 0 ); ///把整個樓下的東西移到紅色茶壺嘴
glRotatef( mouseX , 0 , 0 ); ///會轉動
glTranslatef( 0.41 , -0.05 , 0 ); ///手把移到轉盤的中心
glColor3f(1,1,1);
glutSolidTeapot( 0.3 );
glPopMatrix( );
glPopMatrix( ); ///還原回去
glutSwapBuffers( );
}
void motion( int x , int y )
{
mouseX = x;
glutPostRedisplay( ); ///貼便利貼告訴電腦的GLUT要重畫
}
int main( int argc , char *argv[ ] ) ///char*argv[ ] = char**argv
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("04160683 TRT-Robot");
glutDisplayFunc( display );
glutMotionFunc(motion); glutMainLoop( );
}
執行截圖:
沒有留言:
張貼留言