2018年3月16日 星期五

Week03_陳示珮


第三週
  • 複習上週作業
  • Q&A,動手玩Shape.exe
  • 主題:滑鼠(mouse),鍵盤
  • (主題):移動 Translate

動手玩Shape.exe

                                   (1)從Facebook電腦圖學社團點選老師給的下載連結

 連結 : http://jsyeh.org/3dcg10

                                  (2)連結網址後下載data.zip, windows.zip, glut32.dll 三個檔案

                                       
                                  (3) 到下載裡複製glut32.dll



                                  (4)解壓縮windows.zip檔案



                                (5)把剛剛複製的glut32.dll貼上在解壓縮的windows檔案裡


                                (6)即可打開Shape.exe檔案


                               (7)打開後在右視窗按右鍵能切換模式及程式


                                (8)在左視窗按左鍵能調整頂點的大小


                                (9)在右視窗按住頂點或顏色指數拖曳能改變頂點及色彩大小
                                     滑鼠往左或往下拖曳點數會遞減
                                   

                                滑鼠往右或往上拖曳點數會遞增


                                TRIANGLE_STRIP[x]模式




                               (1)先製造出上禮拜的茶壺

                                程式碼 :

                              #include <stdio.h>
                              #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);
                                   glutCreateWindow("Week03 Mouse");

                                    glutDisplayFunc(display);
                                    //glutMouseFunc(mouse);
                                   //glutMotionFunc(motion);
                                   glutMainLoop();
                              }
    

                               (2)按下滑鼠能直接知道座標位址
                                  *紅色區塊為增加的程式碼

                               程式碼 : 
                               #include <stdio.h>
                               #include <GL/glut.h>
                               void display()
                              {
                                   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
                                   glutSolidTeapot(0.3);
                                   glutSwapBuffers();
                              }
                             void mouse(int button,int state,int x,int y)
                             {
                                    printf("%d %d %d %d\n",button,state,x,y);
                             }
                            int main(int argc,char**argv)
                            {
                                  glutInit(&argc,argv);
                                  glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
                                  glutCreateWindow("Week03 Mouse");

                                 glutDisplayFunc(display);
                                 glutMouseFunc(mouse);
                                //glutMotionFunc(motion);
                                glutMainLoop();
                            }



                                (3)增加紅色區塊程式碼能直接得到座標的程式碼

                                 程式碼 : 
                                #include <stdio.h>
                                #include <GL/glut.h>
                                void display()
                              {
                                  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
                                  glutSolidTeapot(0.3);
                                  glutSwapBuffers();
                              }
                             void mouse(int button,int state,int x,int y)
                            {
                               //printf("%d %d %d %d\n",button,state,x,y);
                              if(state==GLUT_DOWN)
                                   printf("   glVertex2f(%f, %f);\n",(x-150)/150.0,(150-y)/150.0);
                             }
                             int main(int argc,char**argv)
                            {
                               glutInit(&argc,argv);
                               glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
                               glutCreateWindow("Week03 Mouse");

                              glutDisplayFunc(display);
                              glutMouseFunc(mouse);
                             //glutMotionFunc(motion);
                               glutMainLoop();
                             }


                     (4)移動茶壺(移動時滑鼠游標會維持在茶壺的中心點)

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

                               }
                               void mouse(int button,int state,int x,int y)
                               {

                                }
                               void motion(int x,int y)
                               {
                                   teapotX=(x-150)/150.0;teapotY=(150-y)/150.0;
                                   glutPostRedisplay();
                                }
                               int main(int argc,char**argv)
                              {
                                   glutInit(&argc,argv);
                                   glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
                                   glutCreateWindow("Week03 Mouse");

                                   glutDisplayFunc(display);
                                   glutMouseFunc(mouse);
                                   glutMotionFunc(motion);

                                   glutMainLoop();
                               }

         

                               (5)移動茶壺(移動時滑鼠游標可在茶壺的任何地方)

                               程式碼 :
                              #include <stdio.h>
                              #include <GL/glut.h>
                              float teapotX=0,teapotY=0;
                              int oldX=0, oldY=0;
                              void display()
                              {
                                 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
                                 glPushMatrix();
                                 glTranslatef(teapotX,teapotY,0);
                                 glutSolidTeapot(0.3);
                                 glPopMatrix();
                                 glutSwapBuffers();

                             }
                             void mouse(int button,int state,int x,int y)
                           {
                              oldX=x; oldY=y;
                            }
                           void motion(int x,int y)
                           {
                             teapotX+=(x-oldX)/150.0; teapotY+=(oldY-y)/150.0;
                             oldX=x; oldY=y;
                             glutPostRedisplay();
                           }
                         int main(int argc,char**argv)
                          {
                             glutInit(&argc,argv);
                             glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
                             glutCreateWindow("Week03 Mouse");

                            glutDisplayFunc(display);
                            glutMouseFunc(mouse);
                            glutMotionFunc(motion);

                            glutMainLoop();
                          }














沒有留言:

張貼留言