2017年3月21日 星期二

Week 05 邱

#第05週上課重點


         1. 移動 Translate
         2. 旋轉 Rotate
         3. 縮放 Scale
         4. 實作:PushMartrix 
                         PopMartrix
-------------------------------------------------------------------------------------------------------------------------

◎改變茶壺位置

#include <GL/glut.h>

void display( )
{
     glPushMatrix( ) ;  ///備份起來
          glTranslatef( 1 , 0 , 0 );  ///改變座標
          glutSolidTeapot( 0.3 );

      glPopMatrix( );  ///還原回去

      glutSwapBuffers( );
}

int main( int argc , char *argv[ ] )  ///char*argv[ ] = char**argv
{
      glutInit(&argc, argv);

      glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );

      glutCreateWindow("04160683 translate rotate scale");
      glutDisplayFunc( display );

      glutMainLoop( );

}

執行截圖:



◎移動茶壺

#include <GL/glut.h>

float mouseX = 0mouseY = 0 ;
void display( )
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );  ///清掉舊的畫面
    glPushMatrix( ) ;  ///備份起來
          glTranslatef( mouseX, mouseY, 0 );  ///移動位置
          glutSolidTeapot( 0.3 );

      glPopMatrix( );  ///還原回去

      glutSwapBuffers( );  ///交換繪圖的memory buffer 才能畫出來
}
void motion( int x , int y )
{
    mouseX = (150 ) / 150.0 ;
    mouseY = - (150 ) / 150.0 ;
    glutPostRedisplay( );  ///貼便利貼告訴電腦的GLUT要重畫

}
int main( int argc , char *argv[ ] )  ///char*argv[ ] = char**argv
{
      glutInit(&argc, argv);

      glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );

      glutCreateWindow("04160683 translate rotate scale");
      glutDisplayFunc( display );
      glutMotionFunc( motion );

      glutMainLoop( );

}

執行截圖:





◎縮放茶壺

#include <GL/glut.h>

float mouseX = 0mouseY = 0 ;
void display( )
{
      glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );  ///清掉舊的畫面
      glPushMatrix( ) ;  ///備份起來
           glScalef( mouseX, mouseY, 0 );  ///改size縮放
           glutSolidTeapot( 0.3 );

       glPopMatrix( );  ///還原回去

       glutSwapBuffers( );  ///交換繪圖的memory buffer 才能畫出來
}
void motionint x , int y )
{
     mouseX = ( x 150 ) / 150.0 ;
     mouseY = - ( y 150 ) / 150.0 ;
     glutPostRedisplay( );  ///貼便利貼告訴電腦的GLUT要重畫

}
int main( int argc , char *argv[ ]  ///char*argv[ ] = char**argv
{
      glutInit(&argc, argv);

      glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );

      glutCreateWindow("04160683 translate rotate scale");
      glutDisplayFunc( display );
      glutMotionFunc( motion );
      glutMainLoop( );

}

 執行截圖:



◎旋轉茶壺

#include <GL/glut.h>

float mouseX = 0mouseY = 0 , rotX = 0 ;

void display( )
{
      glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );  ///清掉舊的畫面
      glPushMatrix( ) ;  ///備份起來
           glRotatef( rotX0 , 0, 1 );  ///旋轉Z軸
           glutSolidTeapot( 0.3 );

       glPopMatrix( );  ///還原回去

       glutSwapBuffers( );  ///交換繪圖的memory buffer 才能畫出來
}
void motionint x , int y )
{
     mouseX = ( x 150 ) / 150.0 ;
     mouseY = - ( y 150 ) / 150.0 ;
     rotX = 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 translate rotate scale");
      glutDisplayFunc( display );
      glutMotionFunc( motion );
      glutMainLoop( );


}

執行截圖:




沒有留言:

張貼留言