2024年3月7日 星期四

電腦圖學Week03

 Week03

  1. 桌面安裝freeglut把lib的libfreeglut.a複製改名成libglut32.a
  2. File-NewProject,GLUT專案week03_mouse
  3. 貼上10行程式碼
  4. 在加3行
    #include <stdio.h>
    void mouse(int button, int state,int x,int y)
    {
        printf("Hello Mouse!\n");
    }

    變成#include <GL/glut.h>
    #include <stdio.h>
    void mouse(int button, int state,int x,int y)
    {
        printf("Hello Mouse!\n");
    }
    void display()
    {
        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);

        glutMainLoop();
    }

  1. week03_mouse 印參數把第5行printf("Hello Mouse!\n");
    更改成printf("%d %d %d %d\n",button,state,x,y); 
  2. 會變成點茶壺圖繪跳出座標點

  3. week03_mouse 滑鼠寫程式#include <GL/glut.h>
      #include <stdio.h>
        void mouse(int button, int state,int x,int y)
          {
                ///printf("Hello Mouse!\n");
                  ///printf("%d %d %d %d\n",button,state,x,y);
                    if(state==GLUT_DOWN) printf("glVertex2f((%d-150)/150.0,-(%d-150)/150.0);\n",x,y);
                  }
                    void display()
                      {
                            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);

                                                  glutMainLoop();
                                                }


                                              1. 下載windows.zip和data.zip解壓縮後把data檔案放進windows

                                              2. 移動茶壺 在打開一個檔案
                                              #include <GL/glut.h>
                                              #include <stdio.h>
                                              float teapotX=0,teapotY=0;
                                              void mouse(int button, int state,int x,int y)
                                              {
                                                  teapotX = (x-150)/150.0;
                                                  teapotY = -(y-150)/150.0;
                                              }
                                              void display()
                                              {
                                                  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
                                                  glPushMatrix();
                                                      glTranslatef(teapotX,teapotY,0);
                                                      glutSolidTeapot(0.3);
                                                  glPopMatrix();
                                                  glutSwapBuffers();
                                              }
                                              int main(int argc,char*argv[])
                                              {
                                                  glutInit(&argc,argv);
                                                  glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
                                                  glutCreateWindow("week03 mouse");
                                                  glutDisplayFunc(display);
                                                  glutMouseFunc(mouse);

                                                  glutMainLoop();
                                              }


                                              1. 試著了解glRotatef(角度,x,y,z)的參數
                                              2. 可以利用右手比讚來理解。
                                              3. 轉動軸,就是讚的拇指,轉動方向,就是其他手指的轉動方向
                                              4. 對y軸轉,簡單比個讚
                                              5. 對x軸轉,要把拇指向右,也可以轉
                                              6. 對-y軸轉,就是比個倒讚,也可以理解
                                              7. 最難的是z軸,向著哪裏呢?那個拇指向著你的鼻子
                                                                                              1. 1#include <GL/glut.h>
                                                                                                  #include <stdio.h>
                                                                                                    float teapotX=0,teapotY=0;
                                                                                                      float angle = 0;
                                                                                                        void mouse(int button, int state,int x,int y)
                                                                                                          {
                                                                                                                teapotX = (x-150)/150.0;
                                                                                                                  teapotY = -(y-150)/150.0;
                                                                                                                }
                                                                                                                  void display()
                                                                                                                    {
                                                                                                                          glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
                                                                                                                            glPushMatrix();
                                                                                                                                  glRotatef(angle,0,0,1);
                                                                                                                                    glutSolidTeapot(0.3);
                                                                                                                                  glPopMatrix();
                                                                                                                                    glutSwapBuffers();
                                                                                                                                  }
                                                                                                                                    void motion(int x,int y)
                                                                                                                                      {
                                                                                                                                            angle = x;
                                                                                                                                              display();
                                                                                                                                            }
                                                                                                                                              int main(int argc,char*argv[])
                                                                                                                                                {
                                                                                                                                                      glutInit(&argc,argv);
                                                                                                                                                        glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
                                                                                                                                                          glutCreateWindow("week03 mouse");
                                                                                                                                                            glutDisplayFunc(display);
                                                                                                                                                              glutMouseFunc(mouse);
                                                                                                                                                                glutMotionFunc(motion);

                                                                                                                                                                    glutMainLoop();
                                                                                                                                                                  }
                                                                                                                                                                1.  

                                                                                                                                                                1. week03_mouse_translate_rotate




                                                                                                                                                                沒有留言:

                                                                                                                                                                張貼留言