2024年6月14日 星期五

week03 忘了發ㄏㄏ學圖學

1-1.新增glut專案 名稱 week03_mouse

1-2.基本10行GLUT程式碼貼上再另加三行

*#include <stdio.h>

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

{

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

}

*glutMouseFunc(mouse);



1-3.用滑鼠移動茶杯座標程式碼 (旋轉方式欲安培右手定則類似)


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

    glutCreateWindow("week03_mouse_glTranslatef");


    glutDisplayFunc(display);

    glutMouseFunc(mouse);

    glutMotionFunc(motion);


    glutMainLoop();

}

!!!旋轉加移動

#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)

{

    oldX=x;

    oldY=y;

    display();

}

void motion(int x,int y)

{

    if(method==1){

        angle += x;}

    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();

}



沒有留言:

張貼留言