2019年6月29日 星期六

鍾嘉穎的期末作品


https://www.youtube.com/watch?v=3cJGH8asKQ0

程式程作:
1. 每做一個動作按一下W  (可以把他存起來)
2. 把所以動作存好之後(要把Complier關掉)
3. 再把程式跑出來之後,按R,他就會開始跳舞

作品簡介:背景用了史迪奇的圖片,並用了夏威夷的音樂。機器人的舞蹈配合著悠閒的夏威夷的音樂,讓人有一種放鬆、悠閒的感覺。

心得:我覺得這個作業很難,做得很痛苦,很有挫折感。希望老師可以出一個比較付合我們程度的作業。還有我覺得課程太緊湊,經常無法跟上,所以作業才做得那麼痛苦。

06160061_W17

電腦圖學期末作品












影片網址:https://youtu.be/Qge8sifNffs


作品簡介:使用TWICE-Dance the night away作為本次作業的歌曲,透過按鍵w開始進行動作的記憶儲存,並且在關掉視窗後重新開啟按按鍵r即可啟動做出剛剛所用的動作。

學習心得:這次的問題其實遇到蠻多的,但是透過詢問老師也獲得改善,不過要讓機器人跟著音樂節奏跳舞我覺得蠻困難的,所以上次老師給我們看的示範影片做的
非常厲害我十分佩服,這學習利用程式碼學到很多。

郁峰的筆記


複習:貼圖

#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖
///程式碼是對的, 但是沒有設定好include, lib, bin
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
GLuint id;
void myInit()
{
    glEnable(GL_TEXTURE_2D);
    IplImage * img = cvLoadImage("marvel.jpg");
    glGenTextures(1, &id );
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
}
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    myInit();///我們的貼圖在這裡

    glutDisplayFunc(display);

    glutMainLoop();///之前
}
#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2
float a=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background
    glBegin(GL_POLYGON);
        glTexCoord2f(0, 0); glVertex3f(-1, +1, 0);
        glTexCoord2f(0, 1); glVertex3f(-1, -1, 0);
        glTexCoord2f(1, 1); glVertex3f(+1, -1, 0);
        glTexCoord2f(1, 0); glVertex3f(+1, +1, 0);
    glEnd();
    glBindTexture(GL_TEXTURE_2D, id3);///id3 for rotating square
    glPushMatrix();
        glTranslatef(0.5, 0.5, 0);
        glRotatef(a++, 0, 0, 1);
        glScalef(0.3, 0.3, 0.3);
        glBegin(GL_POLYGON);
            glTexCoord2f(0, 0); glVertex3f(-1, +1, 0);
            glTexCoord2f(0, 1); glVertex3f(-1, -1, 0);
            glTexCoord2f(1, 1); glVertex3f(+1, -1, 0);
            glTexCoord2f(1, 0); glVertex3f(+1, +1, 0);
        glEnd();
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, id2);///id2 for teapot
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV

    GLuint id;
    glEnable(GL_TEXTURE_2D);
    glGenTextures(1, &id );
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
    return id;
}
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡
    id2 = myTexture("teapot.jpg");
    id3 = myTexture("square.jpg");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();///之前
}

複習:打光

#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖 ///貼圖需要它
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color///貼圖需要它
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2 ///貼圖需要它
float a=0;

#include "glm.h"///呼叫外掛 ///glm需要它
GLMmodel * pmodel=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel2=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel3=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel4=NULL;///準備指標 ///glm需要它

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background ///貼圖需要它
    glBegin(GL_POLYGON); ///貼圖需要它
        glTexCoord2f(0, 0); glVertex3f(-1, +1, 0); ///貼圖需要它
        glTexCoord2f(0, 1); glVertex3f(-1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 1); glVertex3f(+1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 0); glVertex3f(+1, +1, 0); ///貼圖需要它
    glEnd();///貼圖需要它

    if (!pmodel) { ///glm需要它
        pmodel = glmReadOBJ("body.obj"); ///glm需要它
        if (!pmodel) exit(0); ///glm需要它
        glmUnitize(pmodel); ///glm需要它
        glmFacetNormals(pmodel); ///glm需要它
        glmVertexNormals(pmodel, 90.0); ///glm需要它
    }

    glDisable(GL_TEXTURE_2D);
    glPushMatrix();
        glRotatef(a++, 0,1,0);
        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();

    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename) ///貼圖需要它
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV ///貼圖需要它
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV ///貼圖需要它

    GLuint id; ///貼圖需要它
    glEnable(GL_TEXTURE_2D); ///貼圖需要它
    glGenTextures(1, &id ); ///貼圖需要它
    glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); ///貼圖需要它
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData); ///貼圖需要它
    return id;///貼圖需要它
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f }; ///glm需要它
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f }; ///glm需要它
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它
    id2 = myTexture("teapot.jpg");
    id3 = myTexture("square.jpg");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glEnable(GL_DEPTH_TEST);    ///glm需要它

    glEnable(GL_LIGHT0);  ///glm需要它
    glEnable(GL_NORMALIZE); ///glm需要它
    glEnable(GL_COLOR_MATERIAL); ///glm需要它
    glEnable(GL_LIGHTING); ///glm需要它

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient); ///glm需要它
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse); ///glm需要它
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); ///glm需要它
    glLightfv(GL_LIGHT0, GL_POSITION, light_position); ///glm需要它


    glutMainLoop();///之前
}

複習:模型

#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖 ///貼圖需要它
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color///貼圖需要它
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2 ///貼圖需要它
float a=0;

#include "glm.h"///呼叫外掛 ///glm需要它
GLMmodel * pmodel=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel2=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel3=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel4=NULL;///準備指標 ///glm需要它

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background ///貼圖需要它
    glBegin(GL_POLYGON); ///貼圖需要它
        glTexCoord2f(0, 0); glVertex3f(-1, +1, -1); ///貼圖需要它
        glTexCoord2f(0, 1); glVertex3f(-1, -1, -1); ///貼圖需要它
        glTexCoord2f(1, 1); glVertex3f(+1, -1, -1); ///貼圖需要它
        glTexCoord2f(1, 0); glVertex3f(+1, +1, -1); ///貼圖需要它
    glEnd();///貼圖需要它

    if (!pmodel) { ///glm需要它
        pmodel = glmReadOBJ("body.obj"); ///glm需要它
        if (!pmodel) exit(0); ///glm需要它
        ///glmUnitize(pmodel); ///glm需要它
        glmFacetNormals(pmodel); ///glm需要它
        glmVertexNormals(pmodel, 90.0); ///glm需要它
    }

    glDisable(GL_TEXTURE_2D);
    glPushMatrix();
        glRotatef(a++, 0,1,0);
        glScalef(0.2, 0.2, 0.2);
        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();

    if (!pmodel2) { ///glm需要它
        pmodel2 = glmReadOBJ("head.obj"); ///glm需要它
        if (!pmodel2) exit(0); ///glm需要它
        ///glmUnitize(pmodel2); ///glm需要它
        glmFacetNormals(pmodel2); ///glm需要它
        glmVertexNormals(pmodel2, 90.0); ///glm需要它
    }

    glDisable(GL_TEXTURE_2D);
    glPushMatrix();
        glRotatef(a, 0,1,0);
        glScalef(0.2, 0.2, 0.2);
        glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();

    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename) ///貼圖需要它
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV ///貼圖需要它
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV ///貼圖需要它

    GLuint id; ///貼圖需要它
    glEnable(GL_TEXTURE_2D); ///貼圖需要它
    glGenTextures(1, &id ); ///貼圖需要它
    glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); ///貼圖需要它
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData); ///貼圖需要它
    return id;///貼圖需要它
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f }; ///glm需要它
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f }; ///glm需要它
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它
    id2 = myTexture("teapot.jpg");
    id3 = myTexture("square.jpg");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glEnable(GL_DEPTH_TEST);    ///glm需要它

    glEnable(GL_LIGHT0);  ///glm需要它
    glEnable(GL_NORMALIZE); ///glm需要它
    glEnable(GL_COLOR_MATERIAL); ///glm需要它
    glEnable(GL_LIGHTING); ///glm需要它

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient); ///glm需要它
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse); ///glm需要它
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); ///glm需要它
    glLightfv(GL_LIGHT0, GL_POSITION, light_position); ///glm需要它

    glMatrixMode(GL_PROJECTION); ///投影矩陣相關 戴好我們的正確度數的眼睛
    glLoadIdentity();  ///投影矩陣相關 戴好我們的正確度數的眼睛
    glOrtho(-1,+1, -1,+1, -100,+100); ///投影矩陣相關 戴好我們的正確度數的眼睛
    glMatrixMode(GL_MODELVIEW);  ///投影矩陣相關 切換回我們正確的矩陣

    glutMainLoop();///之前
}

比利安娜工作室-夜狗雞排,W17

電圖Week17 2019/06/13

(1)期末作品展示
介紹:2年前在網路上當紅的俄羅斯厭世背包小弟Barzz以他獨特的舞蹈讓整場表演焦點都放在這位小男孩身上,而這樣的舞蹈也掀起一波模仿潮,本來想安排更多舞步在後面,但看時間來不及了就交了,所以可能有點單調...


(2)選票、加分、心得


(3)學期回顧
剛開始接觸的時候還有點不知道在幹嘛,也因為早上4節英文課的關係,常常上到一半睡著(真是麻煩學姊了每次都來叫我...)跟小葉老師談過後開始調整前一天早睡12點吃完午餐先睡就比較改善了,也很慶幸旁邊坐了會認真上課的同學,才沒有一起床就不知所措,也不會麻煩學姐及老師,期末能把作品動起來真的很感動,雖然真的很複雜,不過搞懂後就比較得心應手,慢慢知道問題在哪了,謝謝小葉老師及玉妮學姊!!!

寶欸學習筆記 week_17

<1>期末作品展示
作品連結:https://www.youtube.com/watch?v=4uTVy3ySNZs
作品介紹:由於版權問題,唱試過很多歌曲作後找了一首無版權的背景音樂,可以放上網路這個作品背景是用太空圖片人物色系偏暗是為了呼應太空背景,音樂也選了一首帶有未來感的背景音樂,也是為了呼應太空的主題
<2>票旋加分心得
<3>作品展示
<4>學期回顧
真的想不到自己可以用程式碼畫圖與放音樂,最後能夠做出一套期末作品確實很感動,謝謝老師不厭其煩的一職幫我解惑,甚至是大半夜回答我的問題,十分謝謝老師!!!

2019年6月13日 星期四

ˊ_>ˋ_week17

(1)期末作品展示:

期末作品:https://youtu.be/JrsoZQgUbxM



Song: Imagine Dragon- Natural
背景:西門町




(2)選票、加分、心得

(3)學期回顧

外系修課之璧綾der肺腑之言XD:
這次我第一次修資傳系的課,想當初我只是隨機挑一堂我平常最不可能碰到的課(動畫設計相關的課)XD。
在挑了之後,不免俗地向大學生一樣上網查老師的教學評價,發現學生給予的評價不是普通的好,所以就選了葉正聖老師的電腦圖學XD,想說來感受一下寫程式做動畫是什麼感覺XD,這堂課上到最後回頭看~內容真的很豐富,而且連我這個動畫門外漢,只要跟著老師一步一腳印,即使偶而不小心脫隊也做得出期末作品,雖然做出來的成品和資傳學生還是有差,比較沒那麼精美,但我著重體驗整個過程,一路上我覺得很開心。
尤其在期末的時候,深深明白部落格筆記真的很重要,如果平常有認真上課,並且把老師上課中的重點也一併寫入部落格,對製作期末作品是會有很大的幫助,能遇見教學這麼認真的老師,我真的感到很開心,除了學到了不少各種跟動畫有關的程式碼,還有也對Maya和CodeBlocks有基本的了解,一堂課學到這個多東西,真的挺開心的XD,不論自己以後會不會走入相關領域,我覺得在這堂課學到的都是一個經驗~很寶貴!

這學期過得很精采,修的其中3、4堂課都要期末專案,最後還幸運地讓我遇見腸病毒,一邊崩潰一邊趕專案結束這學期XD

感謝老師人都很好QQ,還好平常還算有稍微認真XD

--最後決定繼續完善到自己最低標準


(4)Q&A


嗶啵啵嗶啵2019/0613_W17

Week 17
(1)期末作品展示
(2)選票、加分、心得
(3)學期回顧
(4)Q&A