2022年3月14日 星期一

week04

 1-1  windows.zip下載 windows\Transformation.exe

        data.zip下載 windows\data\

        把data拉進windows然後執行windows\Transformation.exe



1-2  建立一個 File-new-project選glut檔名為Week04_translate

          輸入程式碼   #include<GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

    glTranslated(0.3,0.2,0);

    glColor3f(1,0,0);

    glutSolidTeapot(0.3);

     glPushMatrix();

     glutSwapBuffers();

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("HW2 bouns");

    glutDisplayFunc(display);

    glutMainLoop();


}

2-1


#include<GL/glut.h>
void myTeapot(float x,float y)
{



    glPushMatrix();
    glTranslated(x,y,0);
    glutSolidTeapot(0.3);
    glPopMatrix();

}
  void display()
  {
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glColor3f(1,0,0);
    myTeapot(+0.5,+0.5);
    myTeapot(+0.5,-0.5);
    myTeapot(-0.5,-0.5);
    myTeapot(-0.5,+0.5);
    glutSwapBuffers();

  }


int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("HW2 Translate");
    glutDisplayFunc(display);
    glutMainLoop();



}
2-2

建立一個 File-new-project選glut檔名為Week04_mouse
#include<GL/glut.h>
#include <stdio.h>

  void display()
  {
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    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("week04_mouse");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();



}




3-1修改2-2的mouse程式改為下面的程式多加入  int mouseX=0,mouseY=0,顏色    glColor3f(1,1,0),位置 glTranslatef((mouseX-150)/150.0,-(mouseY-150)/150.0,0);最後執行會是滑鼠點哪茶壺會移到點的位置。

  

#include<GL/glut.h>

#include <stdio.h>

  int mouseX=0,mouseY=0;

  void display()

  {

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,0);

    glPushMatrix();

    glTranslatef((mouseX-150)/150.0,-(mouseY-150)/150.0,0);

    glutSolidTeapot(0.3);

    glPopMatrix();

    glutSwapBuffers();


  }


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

   {

      //printf("%d %d %d %d\n",button,state,x,y);

      mouseX=x;mouseY=y;

   }

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week04_mouse");

    glutDisplayFunc(display);

    glutMouseFunc(mouse);

    glutMainLoop();

}

3-2
加入迴圈配陣mx[i]my[i],透過陣列備份座標最後執行時可以點出不同的圖案
#include<GL/glut.h>
#include <stdio.h>
  int mouseX=0,mouseY=0,N=0;
  int mx[100],my[100];
  void display()
  {
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,0);
    glBegin(GL_LINE_LOOP);
      for(int i=0;i<N;i++){
        glVertex2f( (mx[i]-150)/150.0,-(my[i]-150)/150.0);

      }
    glEnd();
    glutSwapBuffers();

  }

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

      mouseX=x;mouseY=y;
      if(state==GLUT_DOWN){
        printf("    glVertex2f((%d-150)/150.0-(%d-150)/150.0);\n",x,y);
        N++;
        mx[N-1]=x; my[N-1]=y;
      }
   }
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week04_mouse");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();

}



沒有留言:

張貼留言