2020年3月17日 星期二

Note by Jack Week04

第三周:Mouse函式、Motion函式、移動




運用上周的茶壺,加入滑鼠控制,移動茶壺。

#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)//滑鼠函式:按鍵、是否按下、座標
{
    printf("%f %f\n",(x-150)/150.0, (y-150)/150.0);
    teapotX= (x-150)/150.0;
    teapotY=-(y-150)/150.0;
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);  //main的參數,於近來
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);  //啟動3D的顯示能力,兩倍顯示buffer,有3D
    glutCreateWindow("Teapot");  //建立3D窗子
    glutDisplayFunc(display);  //如何去畫
    glutMouseFunc(mouse);//滑鼠函式
    glutMainLoop();  //主迴圈停在這,並且不會結束
}

回家作業

#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
float zz=0;///再說我沒有宣告啊
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清背景
    glBegin(GL_POLYGON);///背景
        glColor3f(88/255.0,202/255.0,212/255.0);
        glVertex2f(-1,1);
        glColor3f(199/255.0,218/255.0,199/255.0);
        glVertex2f(1,1);
        glColor3f(255/255.0,182/255.0,141/255.0);
        glVertex2f(1,0);
        glColor3f(254/255.0,141/255.0,123/255.0);
        glVertex2f(1,-1);
        glColor3f(254/255.0,103/255.0,134/255.0);
        glVertex2f(-1,-1);
    glEnd();

    glBegin(GL_POLYGON);///臉
        glColor3f(255/255.0,235/255.0,70/255.0);
        for(float i=0;i<=3.14159265359*2;i+=0.01)
            glVertex2f(cos(i)*0.8,sin(i)*0.8);
    glEnd();

    glBegin(GL_POLYGON);///左眼
        glColor3f(151/255.0,91/255.0,6/255.0);
        for(float i=0;i<=3.14159265359*2;i+=0.01)
            glVertex2f(-0.25+cos(i)*0.105,0.15+sin(i)*0.13);
    glEnd();

    glBegin(GL_POLYGON);///右眼
        glColor3f(151/255.0,91/255.0,6/255.0);
        for(float i=0;i<=3.14159265359*2;i+=0.01)
            glVertex2f(0.25+cos(i)*0.105,0.15+sin(i)*0.13);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glColor3f(151/255.0,91/255.0,6/255.0);
        glVertex2f((86-150)/150.0,-(180-150)/150.0);glVertex2f((90-150)/150.0,-(180-150)/150.0);
        glVertex2f((86-150)/150.0,-(183-150)/150.0);glVertex2f((91-150)/150.0,-(183-150)/150.0);
        glVertex2f((86-150)/150.0,-(185-150)/150.0);glVertex2f((92-150)/150.0,-(185-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((86-150)/150.0,-(185-150)/150.0);glVertex2f((92-150)/150.0,-(185-150)/150.0);
        glVertex2f((86-150)/150.0,-(187-150)/150.0);glVertex2f((94-150)/150.0,-(187-150)/150.0);
        glVertex2f((87-150)/150.0,-(190-150)/150.0);glVertex2f((96-150)/150.0,-(190-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((87-150)/150.0,-(190-150)/150.0);glVertex2f((96-150)/150.0,-(190-150)/150.0);
        glVertex2f((88-150)/150.0,-(193-150)/150.0);glVertex2f((98-150)/150.0,-(193-150)/150.0);
        glVertex2f((89-150)/150.0,-(195-150)/150.0);glVertex2f((100-150)/150.0,-(195-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((89-150)/150.0,-(195-150)/150.0);glVertex2f((100-150)/150.0,-(195-150)/150.0);
        glVertex2f((91-150)/150.0,-(197-150)/150.0);glVertex2f((103-150)/150.0,-(197-150)/150.0);
        glVertex2f((93-150)/150.0,-(200-150)/150.0);glVertex2f((104-150)/150.0,-(200-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((93-150)/150.0,-(200-150)/150.0);glVertex2f((104-150)/150.0,-(200-150)/150.0);
        glVertex2f((95-150)/150.0,-(203-150)/150.0);glVertex2f((108-150)/150.0,-(203-150)/150.0);
        glVertex2f((97-150)/150.0,-(205-150)/150.0);glVertex2f((111-150)/150.0,-(205-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((97-150)/150.0,-(205-150)/150.0);glVertex2f((111-150)/150.0,-(205-150)/150.0);
        glVertex2f((100-150)/150.0,-(207-150)/150.0);glVertex2f((113-150)/150.0,-(207-150)/150.0);
        glVertex2f((102-150)/150.0,-(208-150)/150.0);glVertex2f((119-150)/150.0,-(208-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((102-150)/150.0,-(208-150)/150.0);glVertex2f((119-150)/150.0,-(208-150)/150.0);
        glVertex2f((103-150)/150.0,-(210-150)/150.0);glVertex2f((122-150)/150.0,-(210-150)/150.0);
        glVertex2f((105-150)/150.0,-(212-150)/150.0);glVertex2f((126-150)/150.0,-(212-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((105-150)/150.0,-(212-150)/150.0);glVertex2f((126-150)/150.0,-(212-150)/150.0);
        glVertex2f((108-150)/150.0,-(213-150)/150.0);glVertex2f((129-150)/150.0,-(212-150)/150.0);
        glVertex2f((111-150)/150.0,-(215-150)/150.0);glVertex2f((132-150)/150.0,-(213-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((111-150)/150.0,-(215-150)/150.0);glVertex2f((132-150)/150.0,-(213-150)/150.0);
        glVertex2f((112-150)/150.0,-(216-150)/150.0);glVertex2f((134-150)/150.0,-(213-150)/150.0);
        glVertex2f((115-150)/150.0,-(217-150)/150.0);glVertex2f((136-150)/150.0,-(213-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((115-150)/150.0,-(217-150)/150.0);glVertex2f((136-150)/150.0,-(213-150)/150.0);
        glVertex2f((117-150)/150.0,-(218-150)/150.0);glVertex2f((137-150)/150.0,-(213-150)/150.0);
        glVertex2f((120-150)/150.0,-(220-150)/150.0);glVertex2f((138-150)/150.0,-(213-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((120-150)/150.0,-(220-150)/150.0);glVertex2f((138-150)/150.0,-(213-150)/150.0);
        glVertex2f((123-150)/150.0,-(222-150)/150.0);glVertex2f((139-150)/150.0,-(214-150)/150.0);
        glVertex2f((128-150)/150.0,-(223-150)/150.0);glVertex2f((140-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((128-150)/150.0,-(223-150)/150.0);glVertex2f((140-150)/150.0,-(214-150)/150.0);
        glVertex2f((130-150)/150.0,-(224-150)/150.0);glVertex2f((141-150)/150.0,-(214-150)/150.0);
        glVertex2f((132-150)/150.0,-(225-150)/150.0);glVertex2f((142-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((132-150)/150.0,-(225-150)/150.0);glVertex2f((142-150)/150.0,-(214-150)/150.0);
        glVertex2f((134-150)/150.0,-(225-150)/150.0);glVertex2f((143-150)/150.0,-(214-150)/150.0);
        glVertex2f((138-150)/150.0,-(226-150)/150.0);glVertex2f((144-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((138-150)/150.0,-(225-150)/150.0);glVertex2f((144-150)/150.0,-(214-150)/150.0);
        glVertex2f((140-150)/150.0,-(225-150)/150.0);glVertex2f((145-150)/150.0,-(214-150)/150.0);
        glVertex2f((142-150)/150.0,-(226-150)/150.0);glVertex2f((146-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((142-150)/150.0,-(225-150)/150.0);glVertex2f((146-150)/150.0,-(214-150)/150.0);
        glVertex2f((144-150)/150.0,-(225-150)/150.0);glVertex2f((149-150)/150.0,-(214-150)/150.0);
        glVertex2f((146-150)/150.0,-(226-150)/150.0);glVertex2f((150-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///左嘴
        glVertex2f((146-150)/150.0,-(225-150)/150.0);glVertex2f((150-150)/150.0,-(214-150)/150.0);
        glVertex2f((148-150)/150.0,-(225-150)/150.0);glVertex2f((150-150)/150.0,-(214-150)/150.0);
        glVertex2f((150-150)/150.0,-(226-150)/150.0);glVertex2f((150-150)/150.0,-(214-150)/150.0);
    glEnd();


    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-86-150)/150.0,-(180-150)/150.0);glVertex2f((300-90-150)/150.0,-(180-150)/150.0);
        glVertex2f((300-86-150)/150.0,-(183-150)/150.0);glVertex2f((300-91-150)/150.0,-(183-150)/150.0);
        glVertex2f((300-86-150)/150.0,-(185-150)/150.0);glVertex2f((300-92-150)/150.0,-(185-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-86-150)/150.0,-(185-150)/150.0);glVertex2f((300-92-150)/150.0,-(185-150)/150.0);
        glVertex2f((300-86-150)/150.0,-(187-150)/150.0);glVertex2f((300-94-150)/150.0,-(187-150)/150.0);
        glVertex2f((300-87-150)/150.0,-(190-150)/150.0);glVertex2f((300-96-150)/150.0,-(190-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-87-150)/150.0,-(190-150)/150.0);glVertex2f((300-96-150)/150.0,-(190-150)/150.0);
        glVertex2f((300-88-150)/150.0,-(193-150)/150.0);glVertex2f((300-98-150)/150.0,-(193-150)/150.0);
        glVertex2f((300-89-150)/150.0,-(195-150)/150.0);glVertex2f((300-100-150)/150.0,-(195-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-89-150)/150.0,-(195-150)/150.0);glVertex2f((300-100-150)/150.0,-(195-150)/150.0);
        glVertex2f((300-91-150)/150.0,-(197-150)/150.0);glVertex2f((300-103-150)/150.0,-(197-150)/150.0);
        glVertex2f((300-93-150)/150.0,-(200-150)/150.0);glVertex2f((300-104-150)/150.0,-(200-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-93-150)/150.0,-(200-150)/150.0);glVertex2f((300-104-150)/150.0,-(200-150)/150.0);
        glVertex2f((300-95-150)/150.0,-(203-150)/150.0);glVertex2f((300-108-150)/150.0,-(203-150)/150.0);
        glVertex2f((300-97-150)/150.0,-(205-150)/150.0);glVertex2f((300-111-150)/150.0,-(205-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-97-150)/150.0,-(205-150)/150.0);glVertex2f((300-111-150)/150.0,-(205-150)/150.0);
        glVertex2f((300-100-150)/150.0,-(207-150)/150.0);glVertex2f((300-113-150)/150.0,-(207-150)/150.0);
        glVertex2f((300-102-150)/150.0,-(208-150)/150.0);glVertex2f((300-119-150)/150.0,-(208-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-102-150)/150.0,-(208-150)/150.0);glVertex2f((300-119-150)/150.0,-(208-150)/150.0);
        glVertex2f((300-103-150)/150.0,-(210-150)/150.0);glVertex2f((300-122-150)/150.0,-(210-150)/150.0);
        glVertex2f((300-105-150)/150.0,-(212-150)/150.0);glVertex2f((300-126-150)/150.0,-(212-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-105-150)/150.0,-(212-150)/150.0);glVertex2f((300-126-150)/150.0,-(212-150)/150.0);
        glVertex2f((300-108-150)/150.0,-(213-150)/150.0);glVertex2f((300-129-150)/150.0,-(212-150)/150.0);
        glVertex2f((300-111-150)/150.0,-(215-150)/150.0);glVertex2f((300-132-150)/150.0,-(213-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴7
        glVertex2f((300-111-150)/150.0,-(215-150)/150.0);glVertex2f((300-132-150)/150.0,-(213-150)/150.0);
        glVertex2f((300-112-150)/150.0,-(216-150)/150.0);glVertex2f((300-134-150)/150.0,-(213-150)/150.0);
        glVertex2f((300-115-150)/150.0,-(217-150)/150.0);glVertex2f((300-136-150)/150.0,-(213-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-115-150)/150.0,-(217-150)/150.0);glVertex2f((300-136-150)/150.0,-(213-150)/150.0);
        glVertex2f((300-117-150)/150.0,-(218-150)/150.0);glVertex2f((300-137-150)/150.0,-(213-150)/150.0);
        glVertex2f((300-120-150)/150.0,-(220-150)/150.0);glVertex2f((300-138-150)/150.0,-(213-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-120-150)/150.0,-(220-150)/150.0);glVertex2f((300-138-150)/150.0,-(213-150)/150.0);
        glVertex2f((300-123-150)/150.0,-(222-150)/150.0);glVertex2f((300-139-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-128-150)/150.0,-(223-150)/150.0);glVertex2f((300-140-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-128-150)/150.0,-(223-150)/150.0);glVertex2f((300-140-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-130-150)/150.0,-(224-150)/150.0);glVertex2f((300-141-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-132-150)/150.0,-(225-150)/150.0);glVertex2f((300-142-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-132-150)/150.0,-(225-150)/150.0);glVertex2f((300-142-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-134-150)/150.0,-(225-150)/150.0);glVertex2f((300-143-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-138-150)/150.0,-(226-150)/150.0);glVertex2f((300-144-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-138-150)/150.0,-(225-150)/150.0);glVertex2f((300-144-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-140-150)/150.0,-(225-150)/150.0);glVertex2f((300-145-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-142-150)/150.0,-(226-150)/150.0);glVertex2f((300-146-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-142-150)/150.0,-(225-150)/150.0);glVertex2f((300-146-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-144-150)/150.0,-(225-150)/150.0);glVertex2f((300-149-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-146-150)/150.0,-(226-150)/150.0);glVertex2f((300-150-150)/150.0,-(214-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);///右嘴
        glVertex2f((300-146-150)/150.0,-(225-150)/150.0);glVertex2f((300-150-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-148-150)/150.0,-(225-150)/150.0);glVertex2f((300-150-150)/150.0,-(214-150)/150.0);
        glVertex2f((300-150-150)/150.0,-(226-150)/150.0);glVertex2f((300-150-150)/150.0,-(214-150)/150.0);
    glEnd();

    glColor3f(108/255.0,215/255.0,255/255.0);///我不懂為什麼到這裡顏色放POLYGON就會沒有顏色所以我放外面
    glBegin(GL_POLYGON);///Tears and why can't I have f**king Chinese here?
        for(zz=0;zz<=3.14159265359*2;zz+=0.01)
            glVertex2f(0.345+cos(zz)*0.12,-0.245+sin(zz)*0.17);
    glEnd();

    glBegin(GL_POLYGON);///Tears and why can't I have f**king Chinese here?
        glVertex2f((202-150)/150.0,-(138-150)/150.0);
        glVertex2f((184-150)/150.0,-(178-150)/150.0);
        glVertex2f((219-150)/150.0,-(178-150)/150.0);
    glEnd();

    glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)//滑鼠函式:按鍵、是否按下、座標 108 215 255
{
    printf("%f %f\n",x-150.0,y-150.0);
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);  //main的參數,於近來
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);  //啟動3D的顯示能力,兩倍顯示buffer,有3D
    glutCreateWindow("Week03");  //建立3D窗子
    glutDisplayFunc(display);  //如何去畫
    glutMouseFunc(mouse);//滑鼠函式
    glutMainLoop();  //主迴圈停在這,並且不會結束
}



沒有留言:

張貼留言