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 = 0, mouseY = 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 = ( 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 = 0, mouseY = 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 motion( int 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 = 0, mouseY = 0 , rotX = 0 ;
void display( )
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ///清掉舊的畫面
glPushMatrix( ) ; ///備份起來
glRotatef( rotX, 0 , 0, 1 ); ///旋轉Z軸
glutSolidTeapot( 0.3 );
glPopMatrix( ); ///還原回去
glutSwapBuffers( ); ///交換繪圖的memory buffer 才能畫出來
}
void motion( int 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( );
}
執行截圖:
-------------------------------------------------------------------------------------------------------------------------
◎改變茶壺位置
#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 = 0, mouseY = 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 = ( 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 = 0, mouseY = 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 motion( int 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 = 0, mouseY = 0 , rotX = 0 ;
void display( )
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ///清掉舊的畫面
glPushMatrix( ) ; ///備份起來
glRotatef( rotX, 0 , 0, 1 ); ///旋轉Z軸
glutSolidTeapot( 0.3 );
glPopMatrix( ); ///還原回去
glutSwapBuffers( ); ///交換繪圖的memory buffer 才能畫出來
}
void motion( int 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( );
}
執行截圖:
沒有留言:
張貼留言