2020年3月17日 星期二

week03 茶壺 滑鼠座標


GLUT teapot

和第一週一樣照過程打開GLUT



然後把程式碼改掉改成

#include <GL/glut.h>
void display()
{
    glColor3f(0,0,1);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week2");

    glutDisplayFunc(display);
    glutMainLoop();
}
弄出茶壺



然後改寫程式碼改成
#include <GL/glut.h>
#include <stdio.h>///為了 printf
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;///x:0...300 變成 -1...+1
    teapotY= -(y-150)/150.0;///y:0...300 變成 -1...+1
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");

    glutDisplayFunc(display);///display函式
    glutMouseFunc(mouse);///mouse的函式
    glutMainLoop();
}
就可以使茶壺隨著滑鼠座標出現

GLUT begin_vertex


開一個新的glut


打上程式碼
#include <GL/glut.h>
#include <stdio.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON); 開始畫
    ///程式產生的頂點
    glEnd(); 結束畫
    glutSwapBuffers();
}
void mouse(int button, int state , int x,int y)
{
    if(state==GLUT_DOWN)///只有按下去時,才印出座標,減一半 除一半.0,y加負
    {
        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()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
             glVertex2f( (132-150)/150.0,-(91-150)/150.0);
             glVertex2f( (48-150)/150.0,-(191-150)/150.0);
             glVertex2f( (254-150)/150.0,-(198-150)/150.0);
             glVertex2f( (273-150)/150.0,-(62-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(164/255.0, 223/255.0, 98/255.0, 1);///上底色
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
    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(164/255.0, 223/255.0, 98/255.0, 1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glColor3f(222/255.0, 191/255.0, 99/255.0);
        glVertex2f( (64-150)/150.0,-(115-150)/150.0);
        glVertex2f( (64-150)/150.0,-(182-150)/150.0);
        glVertex2f( (88-150)/150.0,-(188-150)/150.0);
        glVertex2f( (93-150)/150.0,-(88-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();
}

沒有留言:

張貼留言