2017年3月28日 星期二

Week 06 邱

#第06週上課重點


         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( );  ///還原矩陣

◎兩個茶壺旋轉

#include <GL/glut.h>

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

}


執行截圖:





沒有留言:

張貼留言