2022年3月28日 星期一

week06

Week06 

1-1 介紹電腦圖學之父-伊凡·愛德華·蘇澤蘭

          他在大學時期大家都是教數學之類的論文,但是當時因為沒有電腦圖學所以他就很尷尬,有一次剛好有一個報告的學生沒來,於是他就把握這次的機會上台演講,於是就拿到了畢業證書,可見機會都是自己爭取的!

1-2到https://jsyeh.org/3dcg10/

  1. 下載window.zip   data.zip
  2. 兩個都解壓縮後把data丟到window資料夾
  3. 打開window裡的Transformation.exe
  4. 可到下方的小視窗點右鍵 Swap translate/rotate  改變自轉/公轉

1-3 keyboard 程式碼

  1. 到codeblock建立新的專案

    2.打以下程式碼即可出現上圖範例
#include <GL/glut.h>
#include <stdio.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glColor3f(1,1,0);
        glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key, int x,int y)
{
    printf("現在按下:%c 座標在:%d %d\n",key,x,y);
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week06 keyboard");

    glutDisplayFunc(display);                
    glutKeyboardFunc(keyboard);        //鍵盤事件

    glutMainLoop();
}

2-1 製作keyboard_mouse_motion程式碼

複製上一堂課的程式碼並多加上glutMouseFunc(mouse)以及glutMotionFunc(motion)

2-2修改2-1的程式碼

    因為x,y會衝突到因此改為mouseX,mouseY
  1. 修改一下void mouse    void motion
  2. 還有加上glPushMatrix()  glPopMatrix()
  3. 加上glTranslatef((x-150)/150.0,-(y-150)/150.0,z)
  4. 做出來的程式可以拉動小視窗裡的teapot

2-3修改2-1的程式碼   改成可縮放

  1. 增加一個變數scale並設定為1.0
  2. motion內改為 if(mouseX>oldX)scale*=1.01; if(mouseX<oldX)scale*=0.99; display();
  3. 並在glPushMatrix()裡面加glScalef(scale,scale,scale)
  4. 並可做出可縮放的茶壺

2-4結合縮放與移動

  1. 加入now變數 只要鍵盤按英文w:移動 e:旋轉 r:縮放
  2. 上方的glTranslatef  glRotatef  glScalef 必須按照順序放旋轉才會字字轉而不是公轉
  3. 在motion加入35行的angle+=(mouseX-oldX)
  4. 50行的glutInitWindowSize(500,500);可以自行調整視窗大小
  5. 完成後便可像maya一樣可以有移動旋轉縮放功能






    

沒有留言:

張貼留言