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

2019年5月3日 星期五

Tokoyami_world.exe_week10

今天首先要來複習一下旋轉。

首先跟之前都一樣,下載範例然後......(以下略......


這就是這次的範例,首先先單獨調整glRotate......


嗯,一般的旋轉

再來先調整glTranslate,再調整glRotate......


雖然在調整位移後位置偏掉了,但明顯看得出來物體還是呈自轉樣

接著按下右鍵,選擇交換函式,接著開始調整glRotate......


這次的結果完全不同,物體像是以某個點為中心公轉,怎麼差這麼多呢?

原來是因為優先順序問題,距離物件函式越近的函式越優先實行。原本的函式像是先將物體放置於空間之中,在將鏡頭至於空間之中對準它,如此一來無論物體麼位移,旋轉的物體無論如何位移,它永遠都會是自轉。

後者也是先將原本的函式像是先將物體放置於空間之中,但是先將他位移,在將鏡頭至於空間之中對準某點,因此物體進行旋轉時由於盡頭目標不變,因此物體變成公轉的型態。

2019年4月26日 星期五

紫色の兔子 Week10


改變旋轉軸


自轉
glTranslatef(x,y,z);
glRotatef(x,y,z);

公轉
glRotatef(x,y,z);
glTranslatef(x,y,z);








huangxuuu電腦圖學week10

今日目標:TRT旋轉(改變旋轉軸)


一.移動與旋轉
(1)設定好windows目錄,執行transformation.exe
 
(2)觀察glRotatef和glTranslate順序對調會有什麼差別
*glTranslatef();在外面:自轉後一邊移動
*glRotatef();在外面:一邊移動一邊繞著別人轉
 

二.TRT旋轉
 
 

幫我稱10秒!!!week_10

1.講解在程式中 把Translatef和Rotatef的順序對調
   會有怎樣的變化
   Translatef在前面,旋轉的方式像是自體旋轉
   Rotatef在前面,旋轉的方式像是地球公轉,繞著一個圓心轉
   程式順序由下看到上會比較容易理解

2.做出如下圖的程式


圓錐體可在茶壺口旋轉

#include <GL/glut.h> float angle=0; void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslated(0,0.5,0); glutWireTeapot(0.3); glPopMatrix(); glPushMatrix(); glTranslated(0.51,0.63,0); glRotatef(angle,0,0,1); glTranslated(0.6,0,0); glRotatef(-90,0,1,0); glutWireCone(0.1,0.6,10,10); glPopMatrix(); glutSwapBuffers(); } void motion(int x,int y)//用滑鼠來設定x,y { angle = x; display(); } int main(int argc,char ** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("第N個程式"); glutDisplayFunc(display); glutMotionFunc(motion);//呼叫滑鼠函式 glutMainLoop(); }

學渣的奮鬥史-8

我今天手機螢幕摔碎了

難過的一天QAQ


今天的上課內容是在旋轉跟移動還有縮放的關聯

有分自轉及公轉的差別

以下是自轉


再來是公轉


接這用這個概念做了茶壺旋轉的延伸

程式碼如下圖
#include <GL/glut.h>
float angle=0;
void display()
{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();//備份矩陣,保護程式
        glTranslatef(0,0.5,0);
        glutWireTeapot(0.3);
    glPopMatrix();//還原矩陣
        glPushMatrix();//備份矩陣,保護程式
        glTranslatef(0.51,0.63,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.6,0,0);
        glRotatef(-90,0,1,0);
        glutWireCone(0.1,0.6,10,10);
    glPopMatrix();//還原矩陣
    glutSwapBuffers();
}
void motion(int x,int y)//用滑鼠來設定x,y
{
    angle=x;
    display();
}

int main(int argc,char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("第N個程式");
    glutDisplayFunc(display);
    glutMotionFunc(motion);//呼叫滑鼠函式
    glutMainLoop();
}

成果如下




就這樣 ㄅㄅ


week10 吧啦嗶吧啦啵







[4x4] [4x4] [4x4]最後會出現[4x4]
[R][R][S][T][S][T]不管是幾個都是[4x4]
[R][T][S][1*4]會面成[1*4]的




glRotate ( )           glTranslate( )
glTranslate( )        glRotate( )
公轉                     自轉


translate rotate scale這三個的順序都可以
變換,但是會出現不同的排列方式也會有
不一樣的效果

















一樣的數值在不同的先後順序下
就會看起來有不一樣的感覺













調translate 還有rotate 0.0多這樣調
才能調到想要的位子

耀鑫的筆記 Week08

1.先將需要的東西都下載下來(datawin32glut32.dll)並把Transformation.exe打開嘗試看看公轉與自轉的差別
公轉:先glRotatef 再glTranslatef
自轉:先glTranslatef再glRrotatef
圖學中大部分的東西大部分的東西都是由矩陣算出來的
2.試著用opengl的茶壺根圓錐畫一些東西
#include <GL/glut.h> float angle=0; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0,0.5,0); glutWireTeapot(0.3); glPopMatrix(); glPushMatrix(); glTranslatef(0.51,0.63,0); glRotatef(angle,0,0,1); glTranslatef(0.6,0,0); glRotatef(-90,0,1,0); glutWireCone(0.1,0.6,10,10); glPopMatrix(); glutSwapBuffers(); } void motion(int x,int y) { angle = x; display(); } int main(int argc,char**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("week10 TRT"); glutDisplayFunc(display); glutMotionFunc(motion); glutMainLoop(); }

玄玄兒OuO''_Week-10

旋轉跟移動位置不同會導致人物自轉/公轉
下圖為自轉的程式碼
Translate在前 Rotate在後


下圖為公轉的程式碼
Rotate在前 Translate在後



做出可以旋轉東西的程式
程式碼
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0,0.5,0);
        glutWireTeapot(0.3);
    glPopMatrix();
    glPushMatrix();
        glTranslatef(0.51,0.63,0);
        glRotatef(angle, 0,0,1);
        glTranslatef(0.6,0,0);

        glRotatef(-90,0,1,0);
        glutWireCone(0.1,0.6,10,10);
    glPopMatrix();
    glutSwapBuffers();
}
void motion(int x,int y)
{
    angle=x;
    display();
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10");

    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}



程式結果



圓錐體可以旋轉

PJ週記-Week10

依照慣例先下載[data][win32][glut32.dll]
把資料用成下圖



(一)【旋轉】-- 自轉 vs. 公轉



執行Transformation.exe



1.自轉

程式碼如下
   glTranslatef ( X軸 , Y軸 , Z軸 ) ;   ///往左往右移動
      glRotatef ( angle角度 , X軸 , Y軸 , Z軸 ) ;   ///旋轉
      glScalef ( X , Y , Z ) ;    ///大小縮放
      glBegin ( ... ) ;       ///開始畫圖形



如果還是很抽象的話可以看這張動圖








按右鍵選 [s]Swap Translate/rotate

week10

1.複習移動選轉縮放

網址:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
(1)到上面網址下載:data 、win32 glut.32dll source
重複之前的步驟:解壓縮windows.zip->拉data進windows ->複製glut32.dll ->貼上

(2)開啟Transformation


下往上看(物體自轉)

按右鍵可將上面兩行交換
如果Translatef和Rotatef交換位有什麼影響呢?

下往上看(物體公轉)

2.做出圓錐體的尖端對準茶壺口轉動:


把茶壺程式碼的Solid改成Wire就會從實心網狀



程式碼:
#include <GL/glut.h> float angle=0; void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix();///備份矩陣,保護好 glTranslatef(0,0.5,0); glutWireTeapot(0.3); glPopMatrix();///還原矩陣保護好 glPushMatrix(); glTranslatef(0.51,0.63,0);///(3)希望把會動的手從肚臍移到茶壺上 glRotatef(angle,0,0,1);///(1)這是手的旋轉 glTranslatef(0.6,0,0);///(2)這是把選轉中心(肩)先移到畫面的中心(肚臍) glRotatef(-90,0,1,0); glutWireCone(0.1,0.6,10,10); glPopMatrix(); glutSwapBuffers(); } void motion(int x, int y) { angle=x; display(); } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("translate"); glutDisplayFunc(display); glutMotionFunc(motion); glutMainLoop(); }