2024年3月4日 星期一

盛week03

week03 mouse

1.安裝freeglut 拉到桌面 ,改lib 內檔名為libglut32.a

2.打開Codeblocks 新增專案 week03_mouse

3.10行程式貼上

4.加上mouse 的程式

5.執行程式就會出現茶壺,點滑鼠就會有Hello World

 
2..將 printf("Hello World\n");
  更改成 printf("%d %d %d %d\n",button,state,x,y);
  執行 就會有滑鼠位子和座標

程式碼:
#include <GL/glut.h>
#include <stdio.h>

void display()
{
    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_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week03 mouse");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();
}



3.把void mouse (int button,int state,int x,int y){}裡面新增if(state==GLUT_DOWN){
        printf("glVertex2f(%d-150)/150.0,-(%d-150)/150.0\n",x,y);
        }就會有座標了
程式碼:
#include <GL/glut.h>
#include <stdio.h>

void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();

}

void mouse (int button,int state,int x,int y)
{
    if(state==GLUT_DOWN){
        printf("glVertex2f(%d-150)/150.0,-(%d-150)/150.0\n",x,y);
        }
}

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

    glutCreateWindow("week03 mouse");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();
}


4.滑鼠點哪 茶壺跟著移動 
程式碼:
#include <GL/glut.h>
#include <stdio.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)
{
    teapotX = (x-150)/150.0;
    teapotY = -(y-150)/150.0;

}

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

    glutCreateWindow("week03 mouse glTranslatef");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();
}

5.茶壺可以轉動
新增角度 和 motions程式碼
程式碼:

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

}

void mouse (int button,int state,int x,int y)
{
    teapotX = (x-150)/150.0;
    teapotY = -(y-150)/150.0;

}
void motion(int x,int y)
{
    angle = x;
    display();
}


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

    glutCreateWindow("week03 mouse glTranslatef");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}
6.可以轉動移位置
程式碼:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0;
float angle = 0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(teapotX,teapotY,0);
        glRotatef(angle,0,0,1);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();

}
int method=1;
int oldX=0,oldY=0;
void mouse (int button,int state,int x,int y)
{
    ///teapotX = (x-150)/150.0;
    ///teapotY = -(y-150)/150.0;
    oldX=x;
    oldY=y;

}
void motion(int x,int y)
{
    if(method==1){
        angle+=x-oldX;
    }else if(method==2){
            teapotX+=(x-oldX)/150.0;
            teapotY-=(y-oldY)/150.0;
    }
    oldX=x;
    oldY=y;
    display();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='e')method=1;
    if(key=='w')method=2;
}

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

    glutCreateWindow("week03 mouse glTranslatef");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}





沒有留言:

張貼留言