2019年6月13日 星期四

Week16-04160453

2019第17週上課-06161196宋丹華

第17週課程內容:


A.期末作品展示

B.選票 / 加分 / 心得

C.學期回顧

D.Q & A


1.打分數+寫心得跟回饋~

2.期末作品介紹+影片連結:

期末作品介紹--->

(1)作品簡介:
      雖然我的機器人跳舞沒有在音樂的節拍上面!!不過,我有盡量跟著拍子動。
我選的音樂是---高爾宣[沒了你]想選這首歌的動機為,不僅歌詞很貼近生活,也蠻有律動感的~

(2)程式操簡介:
      這個期末作品,需要用到我們14週交的機器人作業來當基礎。可是因為我14週的機器人模型,打光沒有打好所以顏色出不來!!我選擇期末作品重做!!

      我先把模型匯進去glut的專案裡面,因為顏色上還是有跑掉,所以有請老師幫我調一下!!接下來是匯入音樂檔案,確定模型跟音樂是同步的~

      後來就是比較繁雜的寫檔跟讀檔。把動作的檔案利用w鍵寫出來、再用r鍵讀進去、最後用p/t鍵來播放檔案!!!

      最後把動作串連一起,變成一個完整會跳舞的機器人了~

(3)回饋心得:
       起初其實很想放棄這個做作品!!因為我是重新開始做,花了很多時間跟精神~

       還記得做的第一天晚上,我熬夜到4點多,可是半個東西都沒有匯進去專案裡面。

       心情上真的受到很大的挫折!!但是覺得還是不能放棄,都花時間重新建模了。

       應該要好好完成到最後~隔天有問一下班上比較厲害的同學,問他看看還記不記得。

       怎麼把模型匯進去不會有問題。然後,就跑去問老師打光的問題~~~

       接下來就一步一步地完成,匯音樂、寫檔讀檔、連續動作等等,總共花了一個禮拜的時間好不容易完成的那刻,內心真的很激動哈哈哈 覺得很不真實,自己有辦法完成這項作業。

       其實對老師真的很不好意思,因為我理解上很慢,常常看不懂老師寫的程式是甚麼意思?

       然後就會一直問老師,占用到老師的休息時間跟吃飯時間!!!老師很抱歉啦~

       不過,被老師教過真的懂了很多。也比較了解自己下一步該怎麼做囉~

       謝謝老師給我們這個機會做這個做作品,可能出來的樣子不是很美!! 但至少知道怎麼做了才比較重要。 謝謝老師對我的幫忙^_^


影片連結--->
    https://youtu.be/a6QmFvarcD0

幽羊山之土-Week17_期末作品

1.期末作品



2.


電腦圖學成果

https://www.youtube.com/watch?v=HTOeZ0OVEps

期末作品展示w-17


Week17-04160453


彥の圖學筆記 Week15

電腦圖學

2019-05-30 Week15

(1) 主題:攝影機運鏡

Step1. 繪出模型

#include <GL/glut.h>///GLUT 外掛
#include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
GLMmodel * pmodel=NULL;///指標
void drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("data/al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(512,512);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("week15");

//    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}

Step2. 模型打光

#include <GL/glut.h>///GLUT 外掛
#include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
GLMmodel * pmodel=NULL;///指標
void drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("data/al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(512,512);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("week15");

//    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    GLfloat light_pos[] = { 0.0, 0.0, -1.0, 0.0 };
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
    glutMainLoop();

    return 0;
}

Step3. Timer函式:運鏡

#include <GL/glut.h>///GLUT 外掛
              #include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
              GLMmodel * pmodel=NULL;///指標
              void drawmodel(void)
              {
                  if (!pmodel) {
               pmodel = glmReadOBJ("data/al.obj");
               if (!pmodel) exit(0);
               glmUnitize(pmodel);
               glmFacetNormals(pmodel);
               glmVertexNormals(pmodel, 90.0);
              }
                  glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
              }
              void display(void)
              {
                  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                  drawmodel();
                  glutSwapBuffers();
              }
              #include <math.h>///for sin() cos() ///NOW3
              float eyeX=0.5, eyeY=0, eyeZ=0; ///NOW3
              void timer(int t)///NOW3
              {
                  float angle = (t/180.0)*3.1415926; ///NOW3
                  eyeX=0.5*cos(angle); ///NOW3
                  eyeZ=0.5*sin(angle); ///NOW3

                  glutTimerFunc(33, timer, t+1);///NOW3
                  glMatrixMode(GL_MODELVIEW);///NOW3
                  glLoadIdentity();///NOW3
                  gluLookAt( eyeX, eyeY, eyeZ,///eye ///NOW3
                          0, 0, 0,///center ///NOW3
                             0, 1, 0);///up    ///NOW3
              
                  glutPostRedisplay();///NOW3
              }
              int main(int argc, char** argv)
              {
                  glutInit(&argc, argv);
                  glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
                  glutInitWindowSize(512,512);
                  glutInitWindowPosition(50, 50);
                  glutCreateWindow("week15");
              //    glutReshapeFunc(reshape);
                  glutDisplayFunc(display);
                  glutTimerFunc(33, timer, 0);///NOW3
              
                  GLfloat light_pos[] = { 0.0, 0.0, -1.0, 0.0 };
                  glEnable(GL_DEPTH_TEST);
               glEnable(GL_LIGHTING);
                  glEnable(GL_LIGHT0);
                  glLightfv(GL_LIGHT0, GL_POSITION, light_pos);

                  glutMainLoop();

                  return 0;
              }

(2) 主題:投影、矩陣

在Timer函式新增以下三行
1. glMatrixMode(GL_PROJECTION);
2. glLoadIdentity();
3. glOrtho(-1,+1,-1,+1,-10,+10);
/// -10和+10就像是眼鏡,範圍不夠大,身體會斷東斷西

(3) 複習:位置移動&轉動

(4) 複習:背景貼圖

(5) 期末作業