2020年3月17日 星期二

week3.汪

由於上周上課時間較趕沒有好好試過"課外的教材"
這次上課時去使用FB社團的連結http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
因為我相信下禮拜的我一定會"忘記"
                                                所以很貼心地貼了步驟
 
 
 
 

                                                         Mouse程式碼
#include <GL/glut.h>
#include <stdio.h>
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);
    glutMouseFunc(mouse);
    glutMainLoop();

}

                                                        移動Translatef(x,y,z)程式碼
#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.);
    teapotX=(x-150)/150.0;
    teapotY=-(y-150)/150.0;因為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);
 glVertex2d((156-150)/150.0,-(35-150)/150.0);
 glVertex2d((138-150)/150.0,-(59-150)/150.0);
 glVertex2d((124-150)/150.0,-(87-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();

}
week3回家作業 利用頂點畫圖







畫圓形
回家作業(小海豹)
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
void display()
{
 glClearColor(0,128,125,1);
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 glBegin(GL_POLYGON);
*先把身體做出來
    glVertex2f((45-150)/150.0,-(288-150)/150.0);
    glVertex2f((282-150)/150.0,-(288-150)/150.0);
    glVertex2f((287-150)/150.0,-(277-150)/150.0);
    glVertex2f((285-150)/150.0,-(263-150)/150.0);
    glVertex2f((278-150)/150.0,-(252-150)/150.0);
    glVertex2f((275-150)/150.0,-(239-150)/150.0);
    glVertex2f((273-150)/150.0,-(226-150)/150.0);
    glVertex2f((267-150)/150.0,-(210-150)/150.0);
    glVertex2f((259-150)/150.0,-(190-150)/150.0);
    glVertex2f((250-150)/150.0,-(176-150)/150.0);
    glVertex2f((243-150)/150.0,-(162-150)/150.0);
    glVertex2f((232-150)/150.0,-(146-150)/150.0);
    glVertex2f((219-150)/150.0,-(129-150)/150.0);
    glVertex2f((198-150)/150.0,-(108-150)/150.0);
    glVertex2f((176-150)/150.0,-(95-150)/150.0);
    glVertex2f((153-150)/150.0,-(89-150)/150.0);
    glVertex2f((134-150)/150.0,-(84-150)/150.0);
    glVertex2f((105-150)/150.0,-(82-150)/150.0);
    glVertex2f((80-150)/150.0,-(88-150)/150.0);
    glVertex2f((58-150)/150.0,-(101-150)/150.0);
    glVertex2f((45-150)/150.0,-(120-150)/150.0);
    glVertex2f((29-150)/150.0,-(142-150)/150.0);
    glVertex2f((18-150)/150.0,-(175-150)/150.0);
    glVertex2f((15-150)/150.0,-(193-150)/150.0);
    glVertex2f((14-150)/150.0,-(207-150)/150.0);
    glVertex2f((13-150)/150.0,-(222-150)/150.0);
    glVertex2f((17-150)/150.0,-(236-150)/150.0);
    glVertex2f((20-150)/150.0,-(249-150)/150.0);
    glVertex2f((25-150)/150.0,-(261-150)/150.0);
    glVertex2f((35-150)/150.0,-(269-150)/150.0);
    glVertex2f((37-150)/150.0,-(278-150)/150.0);
glEnd();
*然後開始做表情 小海豹沒有甚麼表情
    glBegin(GL_POLYGON);
     glColor3f(62/255.0,58/255.0,57/255.0);
   for(float angle=0;angle<=2*3.1415;angle+=0.01)
   {
glVertex2f( 0.02*cos(angle)-0.3, 0.02*sin(angle)+0.1 );
   }
    glEnd();
    glBegin(GL_POLYGON);
    glColor3f(62/255.0,58/255.0,57/255.0);
   for(float angle=0;angle<=2*3.1415;angle+=0.01)
   {
glVertex2f( 0.02*cos(angle)-0.18, 0.02*sin(angle)+0.1 );
   }
    glEnd();
    glBegin(GL_POLYGON);
    glColor3f(229/255.0,58/255.0,108/255.0);
   for(float angle=0;angle<=2*3.1415;angle+=0.01)
   {
glVertex2f( 0.08*cos(angle)-0.5, 0.08*sin(angle)-0.25 );
   }
    glEnd();
    glBegin(GL_POLYGON);
    glColor3f(229/255.0,58/255.0,108/255.0);
   for(float angle=0;angle<=2*3.1415;angle+=0.01)
   {
glVertex2f( 0.08*cos(angle)+0.05, 0.08*sin(angle)-0.25 );
   }
    glEnd();
    glBegin(GL_POLYGON);
    glColor3f(62/255.0,58/255.0,57/255.0);
    for(float angle=0;angle<=2*3.1415;angle+=0.01)
   {
glVertex2f( 0.053*cos(angle)-0.1, 0.067*sin(angle)-0.05);
   }
    glEnd();
    glBegin(GL_POLYGON);
    glColor3f(62/255.0,58/255.0,57/255.0);
    for(float angle=0;angle<=2*3.1415;angle+=0.01)
   {
glVertex2f( 0.053*cos(angle)-0.35, 0.067*sin(angle)-0.05);
   }
    glEnd();
*嘴巴
 glBegin(GL_POLYGON);
    glVertex2f((120-150)/150.0,-(161-150)/150.0);
    glVertex2f((124-150)/150.0,-(162-150)/150.0);
    glVertex2f((123-150)/150.0,-(166-150)/150.0);
    glVertex2f((130-150)/150.0,-(166-150)/150.0);
    glVertex2f((132-150)/150.0,-(171-150)/150.0);
    glVertex2f((131-150)/150.0,-(180-150)/150.0);
    glVertex2f((125-150)/150.0,-(185-150)/150.0);
    glVertex2f((119-150)/150.0,-(178-150)/150.0);
    glVertex2f((112-150)/150.0,-(183-150)/150.0);
    glVertex2f((108-150)/150.0,-(181-150)/150.0);
    glVertex2f((106-150)/150.0,-(174-150)/150.0);
    glVertex2f((108-150)/150.0,-(166-150)/150.0);
    glVertex2f((114-150)/150.0,-(165-150)/150.0);
    glVertex2f((115-150)/150.0,-(161-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();

}
這次做得沒有想像中的成功 
下次一定會做到最完美的小海豹










沒有留言:

張貼留言