2020年3月17日 星期二

week03

複習上周茶壺(增加滑鼠點擊功能)

#include <GL/glut.h> ///為了glut函式
#include <stdio.h> ///為了printf函式
void display()
{
    glutSolidTeapot(0.5);
    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("week03");

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


茶壺移動

#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0; ///這裡是-1.0 ~ +1.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);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");

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

滑鼠點擊圖形

#include <GL/glut.h>
#include <stdio.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON); ///程式產生的頂點
    glVertex2f((143-150)/150.0, -(81-150)/150.0);
    glVertex2f((114-150)/150.0, -(128-150)/150.0);
    glVertex2f((64-150)/150.0, -(126-150)/150.0);
    glVertex2f((101-150)/150.0, -(154-150)/150.0);
    glVertex2f((88-150)/150.0, -(207-150)/150.0);
    glVertex2f((136-150)/150.0, -(180-150)/150.0);
    glVertex2f((179-150)/150.0, -(211-150)/150.0);
    glVertex2f((162-150)/150.0, -(182-150)/150.0);
    glVertex2f((221-150)/150.0, -(150-150)/150.0);
    glVertex2f((167-150)/150.0, -(142-150)/150.0);
    glVertex2f((139-150)/150.0, -(83-150)/150.0);
    glEnd();
    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_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");

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

實作程式碼(蘋果)

#include <GL/glut.h>
#include <stdio.h>
void display()
{
    glClearColor(255/255.0,255/255.0,255/255.0,1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glColor3f(127/255.0, 76/255.0,27/255.0);
        glVertex2f((144-150)/150.0, -(68-150)/150.0);
        glVertex2f((142-150)/150.0, -(63-150)/150.0);
        glVertex2f((133-150)/150.0, -(56-150)/150.0);
        glVertex2f((134-150)/150.0, -(52-150)/150.0);
        glVertex2f((139-150)/150.0, -(52-150)/150.0);
        glVertex2f((145-150)/150.0, -(60-150)/150.0);
        glVertex2f((149-150)/150.0, -(69-150)/150.0);
        glVertex2f((148-150)/150.0, -(71-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON); ///程式產生的頂點
        glColor3f(185/255.0, 56/255.0, 54/255.0);
        glVertex2f((111-150)/150.0, -(212-150)/150.0);
        glVertex2f((102-150)/150.0, -(203-150)/150.0);
        glVertex2f((91-150)/150.0, -(189-150)/150.0);
        glVertex2f((83-150)/150.0, -(171-150)/150.0);
        glVertex2f((79-150)/150.0, -(158-150)/150.0);
        glVertex2f((77-150)/150.0, -(153-150)/150.0);
        glVertex2f((74-150)/150.0, -(130-150)/150.0);
        glVertex2f((77-150)/150.0, -(111-150)/150.0);
        glVertex2f((88-150)/150.0, -(88-150)/150.0);
        glVertex2f((104-150)/150.0, -(74-150)/150.0);
        glVertex2f((120-150)/150.0, -(69-150)/150.0);
        glVertex2f((167-150)/150.0, -(69-150)/150.0);
        glVertex2f((190-150)/150.0, -(71-150)/150.0);
        glVertex2f((201-150)/150.0, -(75-150)/150.0);
        glVertex2f((217-150)/150.0, -(86-150)/150.0);
        glVertex2f((226-150)/150.0, -(100-150)/150.0);
        glVertex2f((232-150)/150.0, -(122-150)/150.0);
        glVertex2f((232-150)/150.0, -(146-150)/150.0);
        glVertex2f((227-150)/150.0, -(164-150)/150.0);
        glVertex2f((220-150)/150.0, -(177-150)/150.0);
        glVertex2f((211-150)/150.0, -(192-150)/150.0);
        glVertex2f((198-150)/150.0, -(205-150)/150.0);
        glVertex2f((187-150)/150.0, -(211-150)/150.0);
        glVertex2f((170-150)/150.0, -(217-150)/150.0);
        glVertex2f((111-150)/150.0, -(212-150)/150.0);
    glEnd();

    glBegin(GL_POLYGON);
        glColor3f(104/255.0, 124/255.0,64/255.0);
        glVertex2f((159-150)/150.0, -(70-150)/150.0);
        glVertex2f((167-150)/150.0, -(50-150)/150.0);
        glVertex2f((173-150)/150.0, -(38-150)/150.0);
        glVertex2f((183-150)/150.0, -(32-150)/150.0);
        glVertex2f((200-150)/150.0, -(27-150)/150.0);
        glVertex2f((216-150)/150.0, -(27-150)/150.0);
        glVertex2f((231-150)/150.0, -(29-150)/150.0);
        glVertex2f((241-150)/150.0, -(32-150)/150.0);
        glVertex2f((234-150)/150.0, -(44-150)/150.0);
        glVertex2f((225-150)/150.0, -(54-150)/150.0);
        glVertex2f((211-150)/150.0, -(61-150)/150.0);
        glVertex2f((202-150)/150.0, -(63-150)/150.0);
        glVertex2f((184-150)/150.0, -(65-150)/150.0);
        glVertex2f((171-150)/150.0, -(64-150)/150.0);
        glVertex2f((159-150)/150.0, -(69-150)/150.0);
    glEnd();
    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_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}




沒有留言:

張貼留言