2018年3月30日 星期五

Week05 徐如君

複習T,R,S的mouse和motion

1.請先下載win32,data和glut32.dll的檔案
2.請把window,data解壓縮,並把glut32.dll和data資料夾放進window資料夾裡
3.並開啟Transformation.exe這個檔案
   

瞭解T,R,T轉動和階層性轉動

1.學習Swap translate/rotate的差異  程式碼請由下往上看
    (1)這個轉動為自轉
         (自轉:指物件自行旋轉的運動,物件會沿著一條穿越身件本身的軸旋轉)
    (2)這個轉動為公轉
         (公轉:是一物體以另一物體為中心,沿一定軌道所作的循環運動)
         
   (3)這是兩張圖放在一起的圖(可以觀察出兩者的差異)
        

2.第二種瞭解T,R,T轉動的方式

(1)請開啟CodeBlocks的軟體,並從File→New中建立Project 
    


(2)點選GLUT的圖示並點選GO


(3)點選Next
   
(4)請命名你的標題
(5)這時一樣打開上週下載的freeglut的資料夾,並檢查是否已複製libfreeglut.a的檔案

    和重新命名成libglut32.a

(6)把資料夾的網址複製到location的下方空白欄

(7)點選Finish即可
   
(8)請用ctrl+f(搜尋)去找display(void)
 (9)這時把圖片中的三行先註解,並加上這行程式碼(中文為註解)
     glTranslatef(0,0,-6);///先把樓上註解,移到z:-6 
10.這時請把這行註解取消(中文為註解
      glRotated(a,0,0,1);///對Z軸轉動
11.請修改和加入程式碼
      保留這兩行
      glTranslated(-2.4,1.2,-6);///把下面轉動的球,整個移動到左上角

      glRotated(a,0,0,1);///轉動
      和加入glColor3f(1,1,1);
      
      從圖中可看到紅色球和其他球所轉動的方向不同      
12.這時把這兩行互換位置
      glRotated(a,0,0,1);///轉動
      glTranslated(-2.4,1.2,-6);///把下面轉動的球,整個移動到左上角
      
      從圖中你會看到紅球會繞著一個中心點旋轉

       

3.如何改變茶壺的中心點

(1)請先輸入或複製以下的程式碼
    一開始會顯得很不整齊,這時請按滑鼠右鍵並選擇Format use AStyle



#include <GL/glut.h>
float angle=0;///Now: 讓茶壼自動轉動的角度
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Now:備份矩陣
glRotatef(angle, 0,0,1);///Now:轉動
glutSolidTeapot(0.3);
glPopMatrix();///Now:還原矩陣
glutSwapBuffers();
}
void motion(int x, int y)
{
angle=x;///Now: 改變角度
glutPostRedisplay();///Now: 請 重畫畫面
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week05 TRT");
glutDisplayFunc(display);
glutMotionFunc(motion);///Now:
glutMainLoop();
}

(2)使茶壺炳移動到中心點
    請在rotatef這行程式碼下面加入
    glTranslatef(0.45,-0.10,0);///Now2:把茶壺炳放到正中間
     
(3)再修改這些程式碼
     glColor3f(1,0,0); glutSolidTeapot(0.3);///Now3: 中間的紅色茶壺

      glTranslatef(0.45,-0.10,0);///(1)先 Now2:把茶壺炳放到正中間
      glRotatef(angle, 0,0,1);///Now:轉動
      glColor3f(0,1,0); glutSolidTeapot(0.3);
      glPopMatrix();///Now:還原矩陣
      
(4)試著把綠色茶壺炳接到紅色茶壺
     請把程式碼改成如下圖所示
     glColor3f(1,0,0); glutSolidTeapot(0.3);///Now3: 中間的紅色茶壺

      glTranslatef(0.4,0.13,0);
      glRotatef(angle, 0,0,1);///Now:轉動
      glTranslatef(0.45,-0.10,0);///(1)先 Now2:把茶壺炳放到正中間
      glColor3f(0,1,0); glutSolidTeapot(0.3);
      glPopMatrix();///Now:還原矩陣
      
(5)可以再做些改變
     加入這程式碼glPushMatrix();
     並複製
      glColor3f(1,0,0); glutSolidTeapot(0.3);///Now3: 中間的紅色茶壺
      glPushMatrix();///Now4:右手臂
      glTranslatef(0.4,0.13,0);
      glRotatef(angle, 0,0,1);///Now:轉動
      glTranslatef(0.45,-0.10,0);///(1)先 Now2:把茶壺炳放到正中間
      glColor3f(0,1,0); glutSolidTeapot(0.3);
     
(6)可再做出左邊的部分(由於在左邊,所以必須改為負號)
      glPushMatrix();///Now4:左手臂

      glTranslatef(-0.4,0.13,0);
      glRotatef(angle, 0,0,1);///Now:轉動
      glTranslatef(-0.45,-0.10,0);///(1)先 Now2:把茶壺炳放到正中間
      glColor3f(0,1,0); glutSolidTeapot(0.3);


(7)最後,可再把左邊的程式碼稍微修改
     glRotatef(-angle, 0,0,1);///Now:轉動
     可以發現它的轉換方式有改變
     

沒有留言:

張貼留言