顯示具有 Week05 標籤的文章。 顯示所有文章
顯示具有 Week05 標籤的文章。 顯示所有文章

2018年6月4日 星期一

WEEK05 QAQ筆記

WEEK05:T-R-T特地轉軸、階層性旋轉、矩陣(整合)
複習上週:Transformation.exe

任務一:Transformation.exe 複習移動、旋轉 (一樣去老師的網站載需要的東西)

1.開啟Transformation.exe
試試看旋轉方式一種是自己原地轉,另一種是沿著中心點公轉














任務二:TRT改中心點旋轉

1.把茶壺的中心改到把手的位置













#include <GL/glut.h>
float angle=0; ///旋轉的角度
void motion(int x,int y)  /// mouse motion 拖著移動時,會叫motion()
{
    angle=x;
    glutPostRedisplay();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1); ///rotate/translate/scale都會把矩陣改變
        glTranslatef(0.45,-0.08,0); ///移動,讓茶壺的柄,放到畫面中心
        glutSolidTeapot(0.3); ///把茶壺的柄放到畫面中心
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05_TRT_05160806");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}


2.新增另一個茶壺,以握把連接中心點的茶壺 (以此類推











#include <GL/glut.h>
float angle=0;
void motion(int x,int y)
{
    angle=x;
    glutPostRedisplay();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glutSolidTeapot(0.3); ///放在中間

        glTranslatef(0.5,0.15,0); ///把會旋轉的茶壺柄,放到右上角
        glRotatef(angle,0,0,1);
        glTranslatef(0.45,-0.08,0);
        glutSolidTeapot(0.3);///另一個茶壺
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05_TRT_05160806");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}

2018年3月26日 星期一

Week05 來福的汪汪圖學週記

本日目標
複習移動旋轉
TRT特定軸轉
階層性旋轉
矩陣(整合)


觀察結果:
TR >> 原地旋轉
鏡頭跟車子保持一定距離


RT >> 繞圈旋轉
鏡頭旋轉的時候 跟車子有近有遠


小葉老師說明:
TR
 
  
圖片1-1 1-2
簡而言之  把移動的車車放到旁邊

RT
 
 圖片2-1
簡而言之  把車車放到旁邊轉底盤


寫寫看程式
 
 圖片3-1

解釋程式
#include <GL/glut.h>
#include <stdlib.h>


float an=0;///角度一開始設0
void display()///畫圖函式
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清理畫面
    glPushMatrix();///記住乾淨的樣子
        ///下列三行程式由下往上看
        glRotatef(an,0,0,1);///3.把在0.3,-0.07,0位置的茶壺以Z軸旋轉an角度
        glTranslated(0.3,-0.07,0);///2.把茶壺放在0.3,-0.07,0的位置
        glutSolidTeapot(0.3);///1.有個茶壺
    glPopMatrix();///恢復乾淨
    glutSwapBuffers();
}
void mousement(int x,int y)
{
    an=x;
    glutPostRedisplay();///畫面重製
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05 TRT測試");
    glutDisplayFunc(display);
    glutMotionFunc(mousement);
    glutMainLoop();
}


畫個茶壺機器人戰士
圖片4-1

#include <GL/glut.h>
#include <stdlib.h>


float an=0;///角度一開始設0
void display()///畫圖函式
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清理畫面
    glPushMatrix();///記住乾淨的樣子
        ///中心茶壺
        glutSolidTeapot(0.3);///1.有個茶壺

        ///下列程式由下往上看
        glPushMatrix();///右邊手臂的陣列組
                ///A手臂的四行程式
                glTranslated(0.08,0.07,0);///把會旋轉的茶壺放到這裡
                glRotatef(an,0,0,1);///3. 讓茶壺可以旋轉
                glTranslated(0.67,0.01,0);///2. 把茶壺放在這裡
                glutSolidTeapot(0.3);///1. 有個茶壺

            glPushMatrix();///開新手臂的小陣列組
                glTranslated(0.08,0.07,0);///把會旋轉的茶壺放到這裡
                glRotatef(an,0,0,1);///3. 讓茶壺可以旋轉
                glTranslated(0.67,0.01,0);///2. 把茶壺放在這裡
                glutSolidTeapot(0.3);///1. 有個茶壺
            glPopMatrix();///小陣列組結束
            
        glPopMatrix();///右邊手臂陣列組結束

        glPushMatrix();
                glTranslated(-0.08,0.07,0);///把會旋轉的茶壺放到這裡
                glRotatef(an,0,0,1);///3. 讓茶壺可以旋轉
                glTranslated(-0.67,0.01,0);///2. 把茶壺放在這裡
                glutSolidTeapot(0.3);///1. 有個茶壺

            glPushMatrix();
                glTranslated(-0.08,0.07,0);///把會旋轉的茶壺放到這裡
                glRotatef(an,0,0,1);///3. 讓茶壺可以旋轉
                glTranslated(-0.67,0.01,0);///2. 把茶壺放在這裡
                glutSolidTeapot(0.3);///1. 有個茶壺
            glPopMatrix();
        glPopMatrix();

    glPopMatrix();///恢復乾淨
    glutSwapBuffers();
}
void mousement(int x,int y)
{
    an=x;
    glutPostRedisplay();///畫面重製
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05 TRT測試");
    glutDisplayFunc(display);
    glutMotionFunc(mousement);
    glutMainLoop();
}

Week05 T-R-T 180326

本周主題: T - R - T 特定旋轉 、 階層性旋轉 、 矩陣
複習移動: 旋轉(Translate, Rotate)

複習:
1. glTranslatef( x, y, z);
    glRotatef(angle, x, y, z);
    這是自轉


2. glRotatef(angle, x, y, z);
    glTranslatef( x, y, z);
    這是公轉


今天 上課為T-R-T(Translate -> Rotate -> Translate)


改良版
  


八隻八哥八筆記 week05

Week-5

Step1 上週複習
(畫茶壺)

code:
#include <GL/glut.h>

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05step");
    glutDisplayFunc(display);
    glutMainLoop();
}

(茶壺手動自轉)

code:
#include <GL/glut.h>///開啟GL外掛
#include <stdio.h>
float angle=0;
void motion(int x, int y)
{
    angle=x;///改變angle值
    glutPostRedisplay();///重畫
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清理畫面
    glPushMatrix();
        glRotatef(angle,0,0,1);///轉動
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();///秀出東西

}
int main(int argc, char**argv)///主函式
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   glutCreateWindow("05160400Week5");
   glutMotionFunc(motion);
   glutDisplayFunc(display);
   glutMainLoop();

}


Step2 改變位置

部分code:
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清理畫面
    glPushMatrix();
        glRotatef(angle,0,0,1);///轉動
        glTranslatef(0.5,-0.1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();///秀出東西

}

Step3 茶壺關節

code:
#include <GL/glut.h>///開啟GL外掛
#include <stdio.h>
float angle=0;
void motion(int x, int y)
{
    angle=x;///改變angle值
    glutPostRedisplay();///重畫
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清理畫面
    glPushMatrix();
    glutSolidTeapot(0.3);

    glTranslatef(0.5,0.15,0);
        glRotatef(angle,0,0,1);///轉動
        glTranslatef(0.45,-0.08,0);
        glutSolidTeapot(0.3);

    glPopMatrix();///還原矩陣
    glutSwapBuffers();///秀出東西

}
int main(int argc, char**argv)///主函式
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   glutCreateWindow("05160400Week5");
   glutMotionFunc(motion);
   glutDisplayFunc(display);
   glutMainLoop();

}

Step4 多茶壺關節


code:
#include <GL/glut.h>///開啟GL外掛
#include <stdio.h>
float angle=0;
void motion(int x, int y)
{
    angle=x;///改變angle值
    glutPostRedisplay();///重畫
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清理畫面
    glPushMatrix();
    glutSolidTeapot(0.3);
    glPushMatrix();
    glTranslatef(0.5,0.15,0);
        glRotatef(angle,0,0,1);///轉動
        glTranslatef(0.45,-0.08,0);
        glutSolidTeapot(0.3);
         glPushMatrix();

    glTranslatef(0.5,0.15,0);
        glRotatef(angle,0,0,1);///轉動
        glTranslatef(0.45,-0.08,0);
        glutSolidTeapot(0.3);

    glPopMatrix();///還原矩陣
     glPopMatrix();///還原矩陣
    glutSwapBuffers();///秀出東西

}
int main(int argc, char**argv)///主函式
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
   glutCreateWindow("05160400Week5");
   glutMotionFunc(motion);
   glutDisplayFunc(display);
   glutMainLoop();

}








Week05 ㄩㄐ的回歸日常

Week05教學內容

(1)到 jsyeh.org/3dcg10

下載

① windows.zip ➤ Transformation.exe ← 執行它
② data.zip ➤ 很多模型
③ glut32.dll

若無法成功開起任一模型

⓵ 檢察解壓縮的data資料夾是否還有一個data資料夾
⓶ 將之移出並移入windows資料夾
⓷ 檢查任一模型是否可啟動

(2)交換 ┳ glTranslatef(...) ⇄ glRotate(...)

      ┗ glRotatef(...)     ⇄ glTranslate(...)




(3)小葉絕招:左耳貼左肩 從下往上讀

...?????





(4)試著執行公轉/轉不同方向


讓這個東西用不同的方法轉動吧


改變程式碼↓

static void(display)的部分尋找第一個「glPushMatrix」

glPushMatrix();
        //glRotated(60,1,0,0); /*將這行隱藏*/
        glRotated(a,0,0,1);
        glTranslated(-2.4,1.2,-6); /*把這個改到這裡*/

        glutSolidSphere(1,slices,stacks);


    glPopMatrix();


可以轉圈圈了!!!

(5)玩轉茶壺

再把茶壺叫出來玩一次



程式碼要自己打 



如果要轉的話,加入紅框內的程式碼 



改變茶壺的位子 → 在 glRotatef(angle, 0, 0, 1); glutSolidTeapot(0.3);

加入 glTranslatef(0.5, -0.1, 0);



若要叫出第二個茶壺並對著中心茶壺旋轉

將橘框內的程式碼打成這樣



那如果要叫出第三個茶壺呢

加入粉色的框就可以囉 

Week 05 安淇的課堂筆記

1.下載檔案

http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載
windows.zip
data.zip
glut32.dll


2.複習上週教的 移動、旋轉

執行transformation


3.



4.



5.

Aaron的課堂筆記Week05

課堂目標:
1.複習主題:旋轉(Translate,Rotate)
2.新主題:T-R-T特定軸轉 & 階層性旋轉 & 矩陣
3.回家作業
-----------------<<<<<>>>>>-----------------------------
1.備妥檔案於http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/(Freeglut,data,windows,glut32)

2.嘗試不同的旋轉
先以預設值嘗試
在用右鍵Swap交換trslatef跟rotatef的順序
(記憶口訣程式從下而上 從內而外執行)
3.GLUT自己來!
更改程式順序的結果->(圓球的位置受到了影響,神遊物外)
(開始自轉)
4.自己的範例自己做
(改變茶壺旋轉軸中心位置 關鍵在於程式碼的先後順序)
再加上更多茶壺旋轉:
----------------------<<<<>>>>------------
基底:
#include <GL/glut.h>
float angle=0;
void motion(int x,int y)
{
    angle=x;
    glutPostRedisplay();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1);
        glTranslatef(0.45,-0.08,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week05");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}