2024年3月4日 星期一

week3


1.


2.
X向右,Y向上,Z向螢幕外

程式碼:

#01.

#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_DOUBLE| GLUT_DEPTH);

    glutCreateWindow("week mouse");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();
}

---------------------------------------------
#02.

#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);\n",x,y);
    }
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE| GLUT_DEPTH);

    glutCreateWindow("week mouse");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();
}

---------------------------------------------
#03.

#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_DOUBLE| GLUT_DEPTH);

    glutCreateWindow("week mouse");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();
}

---------------------------------------------

#04.

#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();
        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_DOUBLE| GLUT_DEPTH);

    glutCreateWindow("week mouse");

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

    glutMainLoop();
}

---------------------------------------------

#05.

#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;
    printf("method:%c %d\n", key, method);
}

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

    glutCreateWindow("week mouse");

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

    glutMainLoop();
}

沒有留言:

張貼留言