2020年3月17日 星期二

Week03

1.先來個複習

上周的茶壺~記得載freeglut喔!
以下是茶壺程式碼: (要開始對程式碼做一點修改惹)
#include <GL/glut.h>

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

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

    glutDisplayFunc(display);
    glutMainLoop();

}

2.Mous

2-1用滑鼠點出座標八
主程式呼叫: glutMouseFunc(mouse);///mouse函式
mouse函式:
void mouse(int button,int state,int x,int y){
    ///mouse函式: 左中右鍵,DOWN/UP,X座標,Y座標
    printf("%d %d %d %d\n",button,state,x,y);
}
△為了printf記得加 #include <stdio.h>
小黑窗解釋

2-2找出視窗的中點為中心
void mouse(int button,int state,int x,int y){
    printf("%f %f\n",(x-150)/150.0,(y-150)/150.0);
    ///x:  0~300 變成 -1~+1
    ///y:300~  0 變成 -1~+1
}
找到中心惹
2-3滑鼠點哪,茶壺在
最終程式碼:
#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 a,char**b){
    glutInit(&a,b);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week03");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}
滑鼠點哪,茶壺就會出現在哪,很酷八


3.Begin

程式碼:
#include <stdio.h>
#include <GL/glut.h>
void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glBegin(GL_POLYGON);///glVertex2f(x,y);數值在-1.0~+1.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 a,char**b){
    glutInit(&a,b);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week03");

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

}
最後得到的圖形,就是用滑鼠點出的圖形
加入 glColor3f(211/255.0,55/255.0,16/255.0); 改顏色
void display(){
    glClearColor(183/2555.0,203/255.0,87/255.0,1);///背景顏色
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glColor3f(211/255.0,55/255.0,16/255.0);///圓的顏色
        for(float angle=0;angle<=2*3.1415;angle+=0.1){///畫圓
            glVertex2f(0.5*cos(angle),0.5*sin(angle));
        }
    glEnd();
    glutSwapBuffers();
}


沒有留言:

張貼留言