2020年3月31日 星期二

Week04_LSD's HW

1.移動&旋轉&縮放
   
                  Translate:移動
                  Rotate:旋轉
                  Scale:縮放



圖上的示意圖

                               由斜右上方向是大拇指的方向
                       (以此類推用要固定的軸式大拇指方向,四指就是轉動方向)
                      四指方向:X.Y固定開始轉動

旋轉的結果
2.  旋轉      
修改主程式

glutMotionFunc(motion);

mouse motionfunc///捕捉滑鼠的動態。

motion函式
void motion(int x, int y)///mouse的動作

{
    myAngle=x; ///角度

}


還有
要修改和宣告角度
float myAngle=0;
static void display(void)

    const double t=qlutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a=myAngle;                                                3.1旋轉的茶壺  
用上週的程式碼,跟著範例再做一次
改display裡的程式
    glPushMatrix();///現在的矩陣

        glRotatef(myAngle,0,0,1);
        glutSolidTeapot(0.3);
    glPopMatrix();///之前記憶的矩陣

 *問題是每次拖動茶壺就會從初始的位置開始轉

3.2改善的旋轉茶壺  
新增滑鼠函式:
int oldX=0;
void mouse(int button,int state,int x,int y) 
{
    if(state==GLUT_DOWN) oldX=x;///放開的時候,oldX會記錄位置
}
 void motion(int x,int y)
{
   myAngle +=(x-oldX);///原本的角度+滑鼠在的位置-上一步在的位置
   oldX = x;
   display();
}
*記得在主函式裡增加glutMouseFunc(mouse);     

沒有留言:

張貼留言