2020年3月18日 星期三

繼續買帳阿鄧芷豪

1. Mouse函式


#include <GL/glut.h>
#include <stdio.h>///為了printf()

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

}

void mouse(int button,int state,int x, int y)///mouse的函式
{///鍵:0左、1中、2右、0下、1上、 x:0~300、y:0~300
    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("Week03");

   glutDisplayFunc(display);
   glutMouseFunc(mouse);///mouse的函式
   glutMainLoop();
}

2.移動 glTranslatef(x,y,z)

#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;///用變數-1~+1表示座標
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)
{    ///                 x:0...150...300
     ///減150          -150    0    150
     ///除150.0        -1      0    +1
     ///變成              -1     0    +1
    teapotX=(x-150)/150.0;///換算座標
    teapotY=-(y-150)/150.0;///換算座標,小心y要加負號
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week03");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}

3.用Mouse來寫程式(描點畫圖)
#include <GL/glut.h>

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glVertex2f((227-150)/150.0,-(132-150)/150.0);
        glVertex2f((151-150)/150.0,-(115-150)/150.0);
        glVertex2f((85-150)/150.0,-(141-150)/150.0);
        glVertex2f((118-150)/150.0,-(188-150)/150.0);
        glVertex2f((180-150)/150.0,-(186-150)/150.0);
     glEnd();
    glutSwapBuffers();

}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week03");

    glutDisplayFunc(display);
    glutMainLoop();
}











#include <GL/glut.h>
#include <math.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
        for(float angle=0; angle<=3.14159*2; angle+=0.01)
        {
            glVertex2f(cos(angle),sin(angle));
        }
     glEnd();
    glutSwapBuffers();

}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week03");

    glutDisplayFunc(display);
    glutMainLoop();
}







沒有留言:

張貼留言