2020年3月17日 星期二

week03



下載 [glut32.dll] [data] [ win32]


解壓縮windows

將glut32.dll移動至windows資料夾

再將data裡的資料夾移動至windows資料夾內即可開啟

==============================================================

上週交的茶壺




#include <GL/glut.h> ///為了glutXXX( ) 還有glXXXX( )
#include <stdio.h> ///為了printf( )
void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void mouse(int button, int state, int x,int y)
{ ///mouse函式 : 左0中1右2 , 下0 上1 , x座標 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();
}


==============================================================

讓茶壺隨著游標點擊移動

#include <GL/glut.h> ///為了 glutXXXX( ) 還有glXXXX( )
#include <stdio.h> ///TODO:為了printf( )
float teapotX=0, teapotY=0; ///TODO2: 這裡是 -1.0 ~ +1.0的座標
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///TODO2: 清背景
    glPushMatrix(); ///TODO2: 備份矩陣
        glTranslatef(teapotX,teapotY,0); ///TODO2: 移動
        glutSolidTeapot(0.3);
    glPopMatrix(); ///TODO2: 備份矩陣
    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; ///TODO2: 任務: X:0...300變成 -1...+1
    teapotY=-(y-150)/150.0; ///TODO2: 任務: Y:300...0 變成 -1...+1
}///例如        0~150~300
        減150  -150~0~150
        除150  -1~0~1

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);
         
         ///座標貼在這

    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(180/255.0,103/255.0,87/255.0,1); ///180,103,87
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON); ///TODO4: 開始畫
        glColor3f(211/255.0, 203/255.0, 87/255.0); ///顏色
        glVertex2f( (84-150)/150.0, -(47-150)/150.0);
        glVertex2f( (46-150)/150.0, -(94-150)/150.0);
        glVertex2f( (52-150)/150.0, -(160-150)/150.0);
        glVertex2f( (102-150)/150.0, -(198-150)/150.0);
        glVertex2f( (200-150)/150.0, -(212-150)/150.0);
        glVertex2f( (259-150)/150.0, -(153-150)/150.0);
        glVertex2f( (255-150)/150.0, -(88-150)/150.0);
        glVertex2f( (224-150)/150.0, -(52-150)/150.0);
        glVertex2f( (147-150)/150.0, -(21-150)/150.0);
        glVertex2f( (104-150)/150.0, -(22-150)/150.0);

        ///                           0...150...300
       ///減150                -150...0...150
       ///除150.0                -1...0...+1
    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>
#include <math.h>
void display()
{
    glClearColor(180/255.0,103/255.0,87/255.0,1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);
        for(float angle=0;angle<=2*3.1415;angle+=0.01){
            glVertex2f(0.3*cos(angle),0.7*sin(angle));
        }
        glEnd();

    glBegin(GL_POLYGON);
        glColor3f(211/255.0, 203/255.0, 87/255.0);
        glVertex2f( (84-150)/150.0, -(47-150)/150.0);
        glVertex2f( (46-150)/150.0, -(94-150)/150.0);
        glVertex2f( (52-150)/150.0, -(160-150)/150.0);
        glVertex2f( (102-150)/150.0, -(198-150)/150.0);
        glVertex2f( (200-150)/150.0, -(212-150)/150.0);
        glVertex2f( (259-150)/150.0, -(153-150)/150.0);
        glVertex2f( (255-150)/150.0, -(88-150)/150.0);
        glVertex2f( (224-150)/150.0, -(52-150)/150.0);
        glVertex2f( (147-150)/150.0, -(21-150)/150.0);
        glVertex2f( (104-150)/150.0, -(22-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();
}






沒有留言:

張貼留言