顯示具有 04160585_林一權 標籤的文章。 顯示所有文章
顯示具有 04160585_林一權 標籤的文章。 顯示所有文章

2017年7月2日 星期日

Week 18 一權的上課筆記

期末作品

會跳舞的機器人

04160585_林一權


Youtube網址:立即前往

                      心得:
                                 這一學期做這著機器人慢慢從一個會變顏色的三角形,到幫一個茶壺打光
                                ,最後將一個機器人做出來,還可以讓他照著音樂跳舞,真的是太有成就                                   感了,每次上小葉老師的課都讓我到新鮮感,每次學到的東西都不一樣,                                   最特別的就是將這些不一樣的東西串接在一起 ,謝謝老師這學期辛苦的教                                   導。

Week 17 一權的上課筆記

(1)背景貼圖示範
(2)打光貼圖示範
(3)讀檔內插示範
STEP 1:
         1.使用notepad++加入以下幾行程式碼:


        2.專案資料夾內要有以下這幾個檔案:


STEP 2:貼圖(使用FB下載老師的專案檔練習)
         1、一個圓形,貼上地球儀

      2、修改程式碼,將地球貼在平面背景

       3、匯入模型,加入以下程式碼





4、完成打光




Week 14 一權的上課筆記

(1)內插公式
          -------alpha * new + (1-alpha) * old
                               新的                     舊的

---------------------------------------------------------------我是分隔線---------------------------------------------------------
***把內插公式帶入程式碼----------Alpha*NewAngle+(1-Alpha)*OldAngle
STEP 1.下載上次作業檔案
STEP 2.在程式碼中增加以下程式碼

鍵盤+滑鼠
STEP 3.
    float angle[9]={},dir=1;///端午節前,是用角度做事情
    float alpha=0.0;///今天上課教,alpha內插
    float new[9]={0,0,0,0,0,0,0,0,0};///今天上課教,新的角度
    float old[9]={40,40,-40,-40 ,0,0,0,0};///今天上課教,舊的角度

void interpolation()
{
         for(int i=0;i<9;i++){///今天上課教,for迴圈,alpha內插
             angle[i]=alpha * new[i]  + (1-alpha) * old[i-1];///今天上課教
         }
          alpha+=0.1;///今天上課教內插公式
}

STEP 4.增加計時器
void Timer(){
      glutTimerFunc(100,timer,t+1);
    angle++;
    glutPostOverlayRedisplay();
}
(2)存檔讀檔

FILE * fout = NULL;

 if(key=='s' || key =='S'){
        if(fout==NULL){
            fout=fopen("file.txt","w+");
         printf("現在我要產生一個file.txt的檔案在目錄裡面\n");
        }
        fprintf(fout,"%.3f %.3f %.3f %.3f %.3f\n",angle[0],angle[1],angle[2],angle[3],angle[4]);
        printf("現在我印了%.3f %.3f %.3f %.3f %.3f在目錄裡\n",angle[0],angle[1],angle[2],angle[3],angle[4]);
    }


2017年5月30日 星期二

week 12 一權的上課筆記

(1)3D TRT轉動

Step 1:
            進入網站 jsyeh.org/3dcg10下載 data.zip / window.zip / glut32.dll
           
Step 2:
            轉動攝影機
程式碼:
新增:
//1
float eyeX=0, eyeY=0, eyeZ=1;
float centerX=0, centerY=0, centerZ=0;
float upX=0, upY=1, upZ=0;
//2
    glPushMatrix();
        gluLookAt(eyeX, eyeY, eyeZ,
                  centerX, centerY, centerZ,
                  upX, upY, upZ);
        glutSolidTeapot(0.3);
    glPopMatrix();
刪除:
 ///glutReshapeFunc(resize);
///glutKeyboardFunc(key);
///glutIdleFunc(idle);
///glEnable(GL_CULL_FACE);
  ///glCullFace(GL_BACK);

Step 3: 改 gluLookAt(....)
               
Step 4:旋轉物件
程式碼:
#include <GL/glut.h>
#include <math.h>
float eyeX=1, eyeY= 0, eyeZ= 0;
float centerX=0, centerY=0, centerZ=0;
float upX=0, upY=1, upZ=0;
float angle=0;
static void display(void)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60, 1, 0.001, 10000);
    glMatrixMode(GL_MODELVIEW);
    angle+=0.01;
    eyeX=cos(angle); eyeZ=sin(angle);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0);
    glPushMatrix();
        gluLookAt(eyeX, eyeY, eyeZ,
                  centerX, centerY, centerZ,
                  upX, upY, upZ);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

/* Program entry point */

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");

    ///glutReshapeFunc(resize);
    glutDisplayFunc(display);
    ///glutKeyboardFunc(key);
    ///glutIdleFunc(idle);
    glutIdleFunc(display);

    glClearColor(1,1,1,1);
    ///glEnable(GL_CULL_FACE);
    ///glCullFace(GL_BACK);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);

    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();

    return EXIT_SUCCESS;
}



Step5 :機器甩手(茶壺版)

程式碼:
加入
float angle=0, dir=1;

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60, 1, 0.001, 10000);
    glMatrixMode(GL_MODELVIEW);
    angle+=dir;
    if(angle>60) dir=-dir;
    if(angle<0) dir=-dir;
        glPushMatrix();
            glColor3f(1,0,0);
            glutSolidTeapot(0.3);///head
            glPushMatrix();
                glTranslatef(0, -0.3, 0);
                glColor3f(1,1,1);
                glutSolidTeapot(0.3);///body
                glPushMatrix();
                    ///glTranslatef(0.6,0,0);///old rotate
                    glTranslatef(0.3,0,0);/// T
                    glRotatef(angle, 0,0,1);///R
                    glTranslatef(0.3,0,0);/// T
                    glutSolidTeapot(0.3);///right upper arm
                    glPushMatrix();
                        glTranslatef(0.3, 0,0);///T
                        glRotatef(angle, 0,0,1);///R
                        glTranslatef(0.3, 0,0);///T
                        glutSolidTeapot(0.3);///right lower arm
                    glPopMatrix();
                glPopMatrix();
                glPushMatrix();
                    ///glTranslatef(0.6,0,0);///old rotate
                    glTranslatef(-0.3,0,0);/// T
                    glRotatef(-angle, 0,0,1);///R
                    glTranslatef(-0.3,0,0);/// T
                    glutSolidTeapot(0.3);///left upper arm
                    glPushMatrix();
                        glTranslatef(-0.3, 0,0);///T
                        glRotatef(-angle, 0,0,1);///R
                        glTranslatef(-0.3, 0,0);///T
                        glutSolidTeapot(0.3);///left lower arm
                    glPopMatrix();
                glPopMatrix();
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
(2)矩陣、投影矩陣

(3)攝影矩陣
(4)會動的機器人

Week 08 一權的上課筆記

(1)組合出機器人
(2)做出可轉動的關節
(3)錄製動作
(4)回家作業:機器人

課堂:

1.使用3D Exploration
(1)下載3D Exploration (p.s 不要在家下載,第二次使用要收費)















(2)下載小葉老師的檔案(jsyeh.org/3dvg10)--->data.zip中有3D模型















(3)用3D Exploration開啟















(4)File-->Save as -->選取Open GL code(*.cpp)














(5)打開codeblocks-->OpenGLUT-->Remove main file-->讀入剛剛存取得cpp檔案












(6)執行














Week 13 一權的上課筆記

(1)小考:T-R-T觀念
     1.老師示範
         程式碼:
                 glPushMatrix();
                     glTranslatef(0.4 , 0.5 , 0);
                     glRotatef(30 ,0 ,0 ,0 );
                     glTranslatef(0.5 , 0.3 ,0 );
                    drawArm();//位置
                  glPopMatrix();

(2)上周範例
(3)讀圖檔
    Step1: download "OPENCV"
       

Step 2:設定

用notepad++開啟進行以下更改:

<Compiler>
          <Add directory="c:/opencv2.1/include" />

<Linker>
          <Add library="cv210" />
          <Add library="cxcore210" />
          <Add library="highgui210" />

          <Add directory="c:/opencv2.1/lib" />




(4)設定打光





2017年4月26日 星期三

Week 07 一權的上課筆記

(1)期中考試
(2)T-R-T觀念測驗
(3)讀入3D模型
      TODO:
          ☆souce.zip(glm.h,glm,cpp)
             windows.zip--->desktop\windows\Transformation.exe
             data.zip--->desktop\windows\data\soccerball.obj
                                                                    soccerball.mlt .... 等 7 組
             glut32.dll--->desktop\windows\glut32.dll
       1.切換模型
       2.開啟soccerball/obj ---> #v   開頭   vertex
             Notepad++   按右鍵   #vn 開頭   vertex normal
                                                 #vt 開頭    vertex  texture coordinate

Week 04 一權的上課筆記

1.下載 [data] [win32] [gult32.dll] 壓縮檔並進行解壓縮到桌面。
2. [window] 檔案開啟並合併[data] [gult32.dll] 檔案到裡面.




3.開啟GLUT專案,輸入上周的程式碼,新增:glTranlatef(0,0,0);,使茶壺可以改變座標位置

4.新增motion程式碼,滑鼠拖曳可移動茶壺


程式碼:#include <GL/glut.h>
float mouseX=0, mouseY=0;///x、y座標數值設定
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(mouseX,mouseY,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}

void motion(int x, int y)
{
    mouseX = (x-150)/150.0;///滑鼠座標修正
    mouseY = -(y-150)/150.0;
    glutPostRedisplay();
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04160585's model");

    glutMotionFunc(motion);
    glutDisplayFunc(display);
    glutMainLoop();
}

5.拖曳滑鼠可使茶壺放大縮小

程式碼:
#include <GL/glut.h>
float mouseX=0, mouseY=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glScalef(mouseX,mouseY,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}

void motion(int x, int y)
{
    mouseX = (x-150)/150.0;/// x/300.0
    mouseY = -(y-150)/150.0;/// y/300.0
    glutPostRedisplay();///貼個便利貼 Post便利貼,告訴GLUT
    ///要重畫畫面 Re-display
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162664 Translate Rotate Scale");

    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}

2017年4月24日 星期一

Week 08 一權的上課筆記

(1) 貼圖
        GOAL: 玩遊戲的小貼圖

怎麼玩?

1. Google 搜尋 "nehe lesson"
    找32課
2.Download C++程式碼

3.解壓縮檔案打開" Lesson32.cpp"





(2)聲音
       GOAL 1:把聲音加到OpenGL的專案裡
怎麼加?

1.打開Lesson32-->Data找到shot.wav聲音檔

在OpenGL加入程式碼:
    |
    |
    |
    |
  \ | /

void mouse(int button, int state, int x, int y)
{
    PlaySound("C:\\Users\\user\\Downloads\\Lesson32\\Data/shot.wav",NULL,SND_ASYNC);
    ///將 "\" 改成(a) "\\" or  (b) "/"
}
&&
    glutMouseFunc(mouse);
--------------------------------------------------------------------------------------------------------------------------
   
          GOAL  2:點擊鍵盤可播放音檔
                1.在網路上找音檔 DO-RE-ME

加入程式碼:
    |
    |
    |
    |
    |
    |
    |
    |
  \ | /

void keyboard(unsigned char key, int x, int y)
{
    if(key=='1')PlaySound("C:\\Users\\user\\Desktop\\music/do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("C:\\Users\\user\\Desktop\\music/re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("C:\\Users\\user\\Desktop\\music/mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("C:\\Users\\user\\Desktop\\music/fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("C:\\Users\\user\\Desktop\\music/so.wav",NULL,SND_ASYNC);
}
         2.鍵入1,2,3,4,5 便可撥放聲音
--------------------------------------------------------------------------------------------------------------------------
      GOAL  3:播放MP3音樂
       1.將CMP3_MCI檔案放入自己建立的專案資料夾












     2.播音樂
加入程式碼:

    |
    |
    |
    |
    |
    |
    |
    |
  \ | /

#include "CMP3_MCI.h"///(1)放在同一個程式碼專案的目錄中
CMP3_MCI myMP3;

&&
int main(int argc,char *argc[])
            ///(3) Load mp3 file
    myMP3.Load("C:\\Users\\user\\Desktop\\music/yukai.mp3");
    myMP3.Play();///(4) Play the file
(3)小遊戲

2017年4月10日 星期一

Week 06 一權的上課筆記

(1)期中模擬考
☆程式碼+註解
    glPushMatrix();/備份矩陣
        glTranslatef(x ,y ,z );//移動           ---
        glTotatef(angle ,x ,y ,z );//旋轉          | --->尾巴是" f  "
        glScalef(x ,y ,z );//縮放                 ---
        glBegin();//開始畫                
           glColor3f(r ,g ,b );//顏色
           glNormal3f(nx ,ny ,nz );打光法向量  ☆ 
           glTexCoord2f(tx ,ty )//頂點  
           glVertex3f(x ,y ,z );//結束 
           gPMatrix();//還原矩陣
(2)T-R-T
1.旋轉茶壺
STEP:
    1.加入程式碼在 main 函式
          glutIdleFunc(display);






    2.宣告 float angle=0;
    3.加入程式碼
---->移動
---->旋轉




(3)打光
STEP:
1.刪除多餘的程式碼留下要用的部分

      static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    glutSolidTeapot(0.3);

    glPopMatrix();

    glutSwapBuffers();
}
2.留下光源的部分(作用:宣告光源及調整光的方向)

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, -5.0f, 0.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

3.成果如下

 










-----------------------------------------------------我是分隔線-------------------------------------------------------
 1.由上往下打光
   2.由下往上打光

(4)機器人
(形狀測試)
1.正立方體

  glutSolidCube(0.5);









2.球體

glutSolidSphere(0.5,50,50);












(5)回家作業

2017年4月9日 星期日

Week 05 一權的上課筆記

(1)期中考題介紹 
   
glPushMatrix();//備份矩陣
   glRotatef(angle, x, y, z);//旋轉
   glTranslatef(x,y,z);//移動
   glScalef(x,y,z);//縮放
 
   glBegin(GL_POLYGON);//開始畫
      glNormal3f(nx,ny,nz);//打光的法向量
      glTexCoord2f(tx,ty);//貼圖的座標
      glColor3f(r,g,b);//顏色
      glVertex3f(x,y,z);//頂點
   glEnd();//結束畫
                                                                                  glPopMatrix();//還原矩陣

                 
     好的履歷寫法

(2)主題:階層轉動 ★
1.

[ 訣竅 ]

1*右手安培定則
2*想像竹籤插著物品旋轉
glTranslatef(x,y,z);
   glRotate(n旋轉度數,x,y,z)







2.
P.S:物件位於旁邊自體旋轉
程式碼:
        glTranslatef(x,y,z);
        glRotate(angle,x,y,z);
        glScalef(x,y,z);
        glBengin();




3.
P.S
    公轉
程式碼:
glRotate(angle,x,y,z);
glTranslatef(x,y,z);
        glScalef(x,y,z);
        glBengin();




(3)實作:Y-R-T ★
(4)複習:glPushMatrix();glPopMatrix()
(5)期末作品
(6)回家作業