2020年3月17日 星期二

week03(2020/3/17)紀錄


今天進度:
剛開始要複習上周進度,然後畫圖

#include<GL/glut.h>
void a()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week03");
    glutDisplayFunc(a);
    glutMainLoop();
}

基本架構給自己方便複製。
基本茶壺
接著要加入滑鼠mouse程式


glutMouseFunc(m); m為滑鼠程式,
b:按鍵,左鍵為0,中鍵為1,右鍵為2
c:按下與放開,分別為0/1
x:X座標
y:Y座標
void a()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 清理畫面
    glPushMatrix();備份矩陣
        glTranslatef(teapotX,teapotY,0);移動
        glutSolidTeapot(0.3);
    glPopMatrix();備份矩陣
    glutSwapBuffers();
}
void m(int b,int c,int x,int y)
{
    printf("X:%f Y:%f\n",(x-150)/150.0,-(y-150)/150.0);
    teapotX=(x-150)/150.0;轉換座標
    teapotY=-(y-150)/150.0;轉換座標
}
這段程式可以畫出圖,滑鼠點會顯示點的座標
void a()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glVertex2f((25-150)/150.0,-(60-150)/150.0);
        glVertex2f((122-150)/150.0,-(145-150)/150.0);
        glVertex2f((123-150)/150.0,-(30-150)/150.0);
    glEnd();
    glutSwapBuffers();
}
XY座標點轉換原理:
              0...150...300
減150  -150...0...150
除150.0   -1...0...+1

void a()
{
float r,pi=3.1415926;
    glBegin(GL_POLYGON);
        glColor3ub(255,204,77);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (150-150)/150.0+cos(angle), -(150-150)/150.0 + sin(angle) );
        }
    glEnd();///face





    glBegin(GL_POLYGON);
        r=116.0/150.0;
        glColor3ub(102,69,0);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (150-150)/150.0+r*cos(angle), -(150-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=116.0/150.0;
        glColor3ub(255,204,77);
        for(float angle=0; angle<=pi; angle+=0.01){
            glVertex2f( (150-150)/150.0+r*cos(angle), -(150-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=30.0/150.0;
        glColor3ub(255,255,255);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (150-150)/150.0+r*2.8*cos(angle), -(195-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=30.0/150.0;
        glColor3ub(102,69,0);
        for(float angle=0; angle<=pi; angle+=0.01){
            glVertex2f( (150-150)/150.0+r*2.8*cos(angle), -(195-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        glColor3ub(255,204,77);
        glVertex2f(-0.84,-0.22);
        glVertex2f(0.84,-0.22);
        glVertex2f(0.84,0.08);
        glVertex2f(-0.84,0.08);
    glEnd();///mouth


    glBegin(GL_POLYGON);
        r=55.0/150.0;
        glColor3ub(102,69,0);
        for(float angle=0; angle<=pi; angle+=0.01){
            glVertex2f( (71-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=49.0/150.0;
        glColor3ub(255,204,77);
        for(float angle=0; angle<=pi; angle+=0.01){
            glVertex2f( (71-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=55.0/150.0;
        glColor3ub(102,69,0);
        for(float angle=0; angle<=pi; angle+=0.01){
            glVertex2f( (228-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=49.0/150.0;
        glColor3ub(255,204,77);
        for(float angle=0; angle<=pi; angle+=0.01){
            glVertex2f( (228-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        glColor3ub(255,204,77);
        glVertex2f(-0.9,-0.08);
        glVertex2f(-0.9,0.04);
        glVertex2f(0.9,0.05);
        glVertex2f(0.9,-0.08);
    glEnd();
    glBegin(GL_POLYGON);
        glColor3ub(255,204,77);
        glVertex2f(-0.5,0.02);
        glVertex2f(-0.5,0.3);
        glVertex2f(-0.9,0.3);
        glVertex2f(-0.9,0.02);
    glEnd();
    glBegin(GL_POLYGON);
        glColor3ub(255,204,77);
        glVertex2f(0.9,0.05);
        glVertex2f(0.5,0.05);
        glVertex2f(0.5,0.3);
        glVertex2f(0.9,0.3);
    glEnd();

    glBegin(GL_POLYGON);
        r=42.0/150.0;
        glColor3ub(93,173,236);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (55-150)/150.0+r*0.8*cos(angle), -(210-150)/150.0 +1.3*r*sin(angle) );
        }
    glEnd();///t1
    glBegin(GL_POLYGON);
        r=42.0/150.0;
        glColor3ub(93,173,236);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (245-150)/150.0+r*0.8*cos(angle), -(210-150)/150.0 +1.3*r*sin(angle) );
        }
    glEnd();///t2
    glBegin(GL_POLYGON);
        r=34.0/150.0;
        glColor3ub(255,255,255);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (78-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=15.0/150.0;
        glColor3ub(102,69,0);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (78-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
        }
    glEnd();///eye1
    glBegin(GL_POLYGON);
        r=34.0/150.0;
        glColor3ub(255,255,255);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (219-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
        }
    glEnd();
    glBegin(GL_POLYGON);
        r=15.0/150.0;
        glColor3ub(102,69,0);
        for(float angle=0; angle<=pi*2; angle+=0.01){
            glVertex2f( (219-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
        }
    glEnd();///eye2
    glutSwapBuffers();
}

沒有留言:

張貼留言