2019年4月26日 星期五

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

今日主題:T-R-T 旋轉


1.先下載老師給的data,win32,glut32.dll
   http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/


2.window.zip解壓縮到window資料夾,複製glut32.dll到window資料夾裡
   















(打開Transformation.exe 試試看各種角度跟移動)
然後解壓縮然後打開lib資料夾,複製貼上libfreeglut.a,把複製的改名為libglut32.a



4.打開codeblack先建一個glut然後開啟執行,並把本來的程式刪光光



5.製作水壺人(有手的)


 #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();                ///交換buffer顯示
}

void motion(int x, int y)
{

    angle =x;
    display();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);           ///初始化GLUT功能Init是初始化
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                 ///開機有深度不會閃爍GLUT_DEPTH ->可以用出3D
    glutCreateWindow("我是蘇珺心的第一個程式");  ///顯示一個視窗
    glutDisplayFunc(display);  ///呼叫上面的display
    glutMotionFunc(motion);
    glutMainLoop();
}












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(); }


Week 10

1.期中考:OpenGL必背10行函式
2.複習:移動、旋轉、縮放
3.主題:T-R-T 旋轉(改變旋轉軸)

自轉:


公轉:

glTranslatef      glRotatef   交換