2019年5月23日 星期四

珮珮學習日誌 Week14

電腦圖學

(1)主題:計時器 Timer


TODO:在Google Chrome下載freeglut(window的mingw版) 


https://www.transmissionzero.co.uk/software/freeglut-devel/ 並把他解壓縮到桌面


之後再把解壓縮的freeglut資料夾打開來,並找到lib資料夾


再把lib裡面的libfreeglut.a複製成libglut32.a)



接下來開始編寫程式碼:

首先先讓視窗變大



程式碼如下:


#include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidTeapot( 0.3 ); glutSwapBuffers(); } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(500,500);///變大了 glutCreateWindow("week 14 timer"); glutDisplayFunc(display); glutMainLoop(); }



讓圖片可以伴隨聲音打開來

程式碼如下:


#include <GL/glut.h> #include <mmsystem.h>///Now (1) #include <stdio.h>///printf() void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidTeapot( 0.3 ); glutSwapBuffers(); } void timer(int t)///NOW timer!!!! { glutTimerFunc(1000, timer, t+1 );///NOW timer!!!! 起床要播下一個鬧鐘 printf("timer(t) 的 t是 %d\n", t);///順便印一下現在的t是多少 PlaySoundA("fart.wav", NULL, SND_ASYNC);///Now (2) ///NOW timer!!!! } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(500,500);///變大了 glutCreateWindow("week 14 timer"); glutDisplayFunc(display); glutTimerFunc(3000, timer, 0);///NOW timer!!!! glutMainLoop(); }





可以讓茶壺自動旋轉


程式碼如下:


#include <GL/glut.h> #include <mmsystem.h>///Now (1) float angle=0; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(angle, 0,0,1); glutSolidTeapot( 0.3 ); glPopMatrix(); glutSwapBuffers(); } void timer(int t)///NOW timer!!!! { /// 1000 ms = 1 sec, 30 ms = 1/33 sec , 33 fps glutTimerFunc(30, timer, t+1 );///NOW timer!!!! 起床要播下一個鬧鐘 angle += 1; glutPostRedisplay();///系統重繪畫面 } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(500,500);///變大了 glutCreateWindow("week 14 timer"); glutDisplayFunc(display); glutTimerFunc(3000, timer, 0);///NOW timer!!!! glutMainLoop(); }



(2)主題:內插公式




可以讓茶壺往右移動

程式碼如下:

#include <GL/glut.h> #include <mmsystem.h>///Now (1) float angle=0; float nowX=0;///NOW2 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); ///glRotatef(angle, 0,0,1); glTranslatef(nowX, 0, 0);///NOW2 glutSolidTeapot( 0.3 ); glPopMatrix(); glutSwapBuffers(); } void timer(int t)///NOW timer!!!! { /// 1000 ms = 1 sec, 30 ms = 1/33 sec , 33 fps glutTimerFunc(30, timer, t+1 );///NOW timer!!!! 起床要播下一個鬧鐘 float alpha = (t%33) / 33.0;///NOW2 alpha 內插 nowX = alpha* 1 + (1-alpha)* -1 ;///NOW2 angle += 1; glutPostRedisplay();///系統重繪畫面 } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(500,500);///變大了 glutCreateWindow("week 14 timer"); glutDisplayFunc(display); glutTimerFunc(1000, timer, 0);///NOW timer!!!! glutMainLoop(); }





(3)主題:動畫

(4)期末作品





沒有留言:

張貼留言