Week06
1-1 介紹電腦圖學之父-伊凡·愛德華·蘇澤蘭
他在大學時期大家都是教數學之類的論文,但是當時因為沒有電腦圖學所以他就很尷尬,有一次剛好有一個報告的學生沒來,於是他就把握這次的機會上台演講,於是就拿到了畢業證書,可見機會都是自己爭取的!
1-2到https://jsyeh.org/3dcg10/
- 下載window.zip data.zip
- 兩個都解壓縮後把data丟到window資料夾
- 打開window裡的Transformation.exe
- 可到下方的小視窗點右鍵 Swap translate/rotate 改變自轉/公轉
1-3 keyboard 程式碼
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程式碼
2-2修改2-1的程式碼
因為x,y會衝突到因此改為mouseX,mouseY
- 修改一下void mouse void motion
- 還有加上glPushMatrix() glPopMatrix()
- 加上glTranslatef((x-150)/150.0,-(y-150)/150.0,z)
- 做出來的程式可以拉動小視窗裡的teapot
2-3修改2-1的程式碼 改成可縮放
- 增加一個變數scale並設定為1.0
- motion內改為 if(mouseX>oldX)scale*=1.01; if(mouseX<oldX)scale*=0.99; display();
- 並在glPushMatrix()裡面加glScalef(scale,scale,scale)
- 並可做出可縮放的茶壺
2-4結合縮放與移動
- 加入now變數 只要鍵盤按英文w:移動 e:旋轉 r:縮放
- 上方的glTranslatef glRotatef glScalef 必須按照順序放旋轉才會字字轉而不是公轉
- 在motion加入35行的angle+=(mouseX-oldX)
- 50行的glutInitWindowSize(500,500);可以自行調整視窗大小
- 完成後便可像maya一樣可以有移動旋轉縮放功能







沒有留言:
張貼留言