2019年5月24日 星期五

alanhc/張牧之 電腦圖學-week14

0. 計時器
1. 影格
2. 內插 / 插值(Interpolation)
3. 改預設路徑(美麗的錯誤)
4. Dancing Time!!!
5. 小葉閒聊

0. 計時器

解釋

glutTimerFunc(持續時間, 呼叫的timer函式, 在第幾秒);

實作

1. include #include
2. 放音樂在 freeglut/bin
3. 寫程式
main() 放入
glutTimerFunc(1000, timer, 0);
新憎程式
void timer(int t)
{
PlaySoundA("carhn[1].wav", NULL, SND_ASYNC);
}
Q 如果要馬上播呢?
A. 加入這行
void timer(int t)
{
glutTimerFunc(1000, timer, t+1); ///馬上播 < 就是這行
printf("%d \n", t);
PlaySoundA("carhn[1].wav", NULL, SND_ASYNC);
}

1.影格

介紹

FPS
一般來我們是30fps
因此每秒會有30張











recall 大一flash設計
重要概念:關鍵影格








因此,重要個部份來了
這背後到底怎麼做的?????

> 數學!!! 內插法(Interpolation)

2.內插 / 插值(Interpolation)

看張圖理解


公式 [ 參考資料1wiki ] [ 參考資料2 stackexchange ] [ 超詳細! ]


口訣:

座標  = alpha * 新+ (1-alpha) * 舊

alpha 是 0~1的數字
新 配 alpha
舊 配 (1-alpha)
舊的是0
新的是1

Excel 算下去就對啦


alpha = t/30
內插: alpha*新+(1-alpha)*舊

這樣就可以算出來拉哈哈哈

程式

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(nowX, 0,0);
glutSolidTeapot( 0.3 );
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)
{
glutTimerFunc(30, timer, t+1); ///馬上播
printf("%d \n", t);


float alpha = (t%30) / 30.0;
nowX = alpha*1.0+(1-alpha) * -1.0;

glutPostRedisplay();
}
display() 的glTranslatef(nowX, 0,0);負責畫圖
由timer裡的nowX = alpha*1.0+(1-alpha) * -1.0算座標

3.改預設路徑(美麗的錯誤)


在專案資料夾會有個
/>改working_dir="."
所以會變這樣
/>然後
會出現這

因為路徑改掉了!!!去freeglut\bin下載回來即可

4.Dancing Time!!!

1. 移動模型 (擺好pose)
2. 紀錄 (recall 前面觀念的 關鍵影格)
3. 貼很多次 (變成動畫)
好像是 poping 還是 locking

Next > 使用Alpha compositing


筆記


影格的概念

讀檔

if (key=='t') {
    ///啟動timer
 
}

捕間動畫 > timer 

mlt材質
obj點




Q&A
glutPostRedisplay 跟glutMainLoop()講我需要一直檢查

5.小葉閒聊

14 now
15
X

沒有留言:

張貼留言