2020年3月17日 星期二

week03轉盤轉出10連

每日曬婆

一樣是複習上禮拜的,以下有程式碼:
#include<GL/glut.h>
void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}

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

    glutDisplayFunc(display);
    glutMainLoop();
}
----------------------以上是程式碼---------------------------
而我們現在多了顯示滑鼠座標的函式,需要注意的是printf需要stdio.h來辨讀。以下是程式碼:
#include<GL/glut.h>
#include<stdio.h>///printf需要
void display()
{
    glutSolidTeapot(0.3);
    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);///叫出display的函式
    glutMouseFunc(mouse);///叫出mouse的函式
    glutMainLoop();
}
----------------------------------以上--------------------------------
這裡現在再去做座標的轉換,原本是(300,300)要把她轉換成(1,1)。所以裡面的程式碼要做一些更改,以下一樣是程式碼:
#include<GL/glut.h>
#include<stdio.h>///printf需要
float teapotX=0,teapotY=0;///預設圖片所在位置為0,0
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///把背景清掉
    glPushMatrix();///備分矩陣
        glTranslatef(teapotX,teapotY,0);///移動
        glutSolidTeapot(0.3);
    glPopMatrix();///備分矩陣
    glutSwapBuffers();
}
///原本的座標為XY300,300而圖片位置為150,150,所以我們需要做轉換
void mouse(int button,int state,int x,int y)///標示出滑鼠的函式
{
    printf("%f %f\n",(x-150)/150.0,(y-150)/150.0);///轉換成XY為1,1
    teapotX=(x-150)/150.0;///X:0~300變成-1~1
    teapotY=(y-150)/150.0;///Y:300~0變成-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();
}
----------------------------------------------------------------------------
最後用座標來用出圖形。
#include<GL/glut.h>
#include<stdio.h>///printf需要
float teapotX=0,teapotY=0;///預設圖片所在位置為0,0
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///把背景清掉
    glBegin(GL_POLYGON);///開始畫
    glColor3f(158/255.0,34/255.0,36/255.0);
        glVertex2f((66-150)/150.0,-(36-150)/150.0);///66.3
        glVertex2f((62-150)/150.0,-(40-150)/150.0);///61.12
        glVertex2f((61-150)/150.0,-(54-150)/150.0);///55.4
        glVertex2f((52-150)/150.0,-(54-150)/150.0);///53.16
        glVertex2f((38-150)/150.0,-(61-150)/150.0);///41.17
        glVertex2f((23-150)/150.0,-(67-150)/150.0);///46.27
        glVertex2f((10-150)/150.0,-(82-150)/150.0);///50.47
        glVertex2f((6-150)/150.0,-(102-150)/150.0);///82.44
        glVertex2f((5-150)/150.0,-(121-150)/150.0);///54.93
        glVertex2f((9-150)/150.0,-(141-150)/150.0);///47.108
        glVertex2f((20-150)/150.0,-(155-150)/150.0);///78.115
        glVertex2f((36-150)/150.0,-(170-150)/150.0);///81.83
        glVertex2f((58-150)/150.0,-(175-150)/150.0);///
        glVertex2f((89-150)/150.0,-(176-150)/150.0);
        glVertex2f((106-150)/150.0,-(167-150)/150.0);
        glVertex2f((120-150)/150.0,-(141-150)/150.0);
        glVertex2f((76-150)/150.0,-(55-150)/150.0);
        glVertex2f((67-150)/150.0,-(56-150)/150.0);
        glVertex2f((71-150)/150.0,-(44-150)/150.0);
        glVertex2f((72-150)/150.0,-(36-150)/150.0);
        ///原理    0...150...300
        ///減150 -150...0...150
        ///除150   -1...0...+1
        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);///叫出display的函式
    glutMouseFunc(mouse);///叫出mouse的函式
    glutMainLoop();
}
---------------------------------------------------------

沒有留言:

張貼留言