2017年4月25日 星期二

Week10 王婉懿的上課筆記

  • 作業一 : 足球 
         步驟 一 : 下載freeglut,windows,data,source,glut32五個檔案。
               連結 : http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
 
 
 
           步驟二 : 解壓縮到桌面。並將檔案glut32和data直接拖曳並複製到window的檔案中。

 

 
           步驟三 : 開啟"Transformation",將車子換成足球。



  • 作業二 : 旋轉模型
           步驟一 : 下載老師給的檔案"myGLMsample",紅色部分可以改模型。
              主要程式 :
              #include <string.h>
              #include <stdlib.h>
              #include <GL/glut.h>
              #include "glm.h"
              GLMmodel* pmodel = NULL;
              float angle=0;
              void display()
              {
                  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                  glPushMatrix();
                      angle++;
                      glRotatef(angle, 0,1,0);
                      if (!pmodel) {
                      pmodel = glmReadOBJ("data/porsche.obj");
                      if (!pmodel) exit(0);
                      glmUnitize(pmodel);
                      glmFacetNormals(pmodel);
                      glmVertexNormals(pmodel, 90.0);
                      }
                      glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
                  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 };
              int main(int argc, char**argv)
              {
                  glutInit(&argc, argv);
                  glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
                  glutCreateWindow("Yes, 3D Model Here");
                  glutDisplayFunc(display);
                  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();
              }


                 改成 :     pmodel = glmReadOBJ("data/al.obj");


 
  •  作業三 : 射擊遊戲
           步驟一 : 下載音樂檔。
 
 
           步驟二 : 改剛剛的程式碼,點擊滑鼠可發出槍聲。(可以換模型)
              程式 :
              #include <string.h>
              #include <stdlib.h>
              #include <GL/glut.h>
              #include "glm.h"
              GLMmodel* pmodel = NULL;
              float angle=0;
              void display()
              {
                  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                  glPushMatrix();
                      angle++;
                      glRotatef(angle, 0,1,0);
                      if (!pmodel) {
                      pmodel = glmReadOBJ("data/porsche.obj");
                      if (!pmodel) exit(0);
                      glmUnitize(pmodel);
                      glmFacetNormals(pmodel);
                      glmVertexNormals(pmodel, 90.0);
                      }
                      glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
                  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 };
             #include<mmsystem.h>
             void mouse (int button,int state,int x,int y)
             {
                 PlaySound("C:\\Users\\user\\Desktop\\Lesson32\\Data/shot.wav",NULL,SND_ASYNC);
             }

              int main(int argc, char**argv)
              {
                  glutInit(&argc, argv);
                  glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
                  glutCreateWindow("Yes, 3D Model Here");
                  glutDisplayFunc(display);
                  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();
              }
 
 
 
  
  •  作業四 : 鋼琴
           步驟一 :  改程式,按鍵盤可以發聲。
             程式 :
              #include <string.h>
              #include <stdlib.h>
              #include <GL/glut.h>
              #include "glm.h"
              GLMmodel* pmodel = NULL;
              float angle=0;
              void display()
              {
                  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                  glPushMatrix();
                      angle++;
                      glRotatef(angle, 0,1,0);
                      if (!pmodel) {
                      pmodel = glmReadOBJ("data/porsche.obj");
                      if (!pmodel) exit(0);
                      glmUnitize(pmodel);
                      glmFacetNormals(pmodel);
                      glmVertexNormals(pmodel, 90.0);
                      }
                      glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
                  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 };
              #include<mmsystem.h>
              void keyboard(unsigned char key,int x,int y)
              {
                   if(key=='1')   PlaySound("Do.wav",NULL,SND_ASYNC);
                   if(key=='2')   PlaySound("Re.wav",NULL,SND_ASYNC);
                   if(key=='3')   PlaySound("Mi.wav",NULL,SND_ASYNC);
                   if(key=='4')   PlaySound("Fo.wav",NULL,SND_ASYNC);
                   if(key=='5')   PlaySound("So.wav",NULL,SND_ASYNC);
              }

             #include<mmsystem.h>
             void mouse (int button,int state,int x,int y)
             {
                 PlaySound("C:\\Users\\user\\Desktop\\Lesson32\\Data/shot.wav",NULL,SND_ASYNC);
             }

              int main(int argc, char**argv)
              {
                  glutInit(&argc, argv);
                  glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
                  glutCreateWindow("Yes, 3D Model Here");
                  glutDisplayFunc(display);
                  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();
              }
 
 
 
 
 

沒有留言:

張貼留言