2017年4月11日 星期二

Week08_嗯對,這是賴小沫的

 1_期中模擬考題

glPushMatrix(); //備份矩陣
   glTranslatef(x,y,z); //移動
   glRotatef(angle,x,y,z); //旋轉
   glScalef(x,y,z); //縮放
      glBegin(GL_POLYGON); //開始畫
         glNormal3f(nx,ny,nz); //打光法向量
         glTexCoord2f(tx,ty); //貼圖座標
         glColor3f(r,g,b); //顏色
         glVertex3f(x,y,z); //頂點
      glEnd(); //結束畫
glPopMatrix(); //還原矩陣

 2_打光

 
#include <GL/glut.h>
static void display(void)
{
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0);
    glPushMatrix(); //備份矩陣
        //glTranslatef(x,y,z); //移動
        //glRotatef(angle,x,y,z); //轉動

        glutSolidTeapot(0.3);
    glPopMatrix(); //還原矩陣
    glutSwapBuffers();
}

/*找light,留8行*/
const GLfloat light_ambient[] = {0.0f,0.0f,0.0f,1.0f};
const GLfloat light_diffuse[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_position[] = {2.0f,5.0f,5.0f,0.0f};
const GLfloat mat_ambient[] = {0.7f,0.7f,0.7f,1.0f};
const GLfloat mat_diffuse[] = {0.8f,0.8f,0.8f,1.0f};
const GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat high_shininess[] = {100.0f};

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    //glutReshapeFunc(resize);  //沒有用到
    glutDisplayFunc(display);
    //glutKeyboardFunc(key);  //沒有用到
    //glutIdleFunc(idle);  //沒有用到


    glClearColor(1,1,1,1);
    /*找light,留8行,設定燈光內容是否開啟*/
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    /*找light,留8行*/
    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();
    return EXIT_SUCCESS;
}

按下F9執行,結果如下:

 3_旋轉打光



#include <GL/glut.h>
float angle=0;
static void display(void)
{
    angle++;
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0);
    glPushMatrix(); //備份矩陣
        //glTranslatef(x,y,z); //移動
        glRotatef(angle,0,1,0); //轉動
        glutSolidTeapot(0.3);
    glPopMatrix(); //還原矩陣
    glutSwapBuffers();
}

//打光
const GLfloat light_ambient[] = {0.0f,0.0f,0.0f,1.0f};
const GLfloat light_diffuse[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_position[] = {2.0f,5.0f,5.0f,0.0f};
const GLfloat mat_ambient[] = {0.7f,0.7f,0.7f,1.0f};
const GLfloat mat_diffuse[] = {0.8f,0.8f,0.8f,1.0f};
const GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat high_shininess[] = {100.0f};

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");

    //glutReshapeFunc(resize);
    glutDisplayFunc(display);
    //glutKeyboardFunc(key);
    glutIdleFunc(display); //電腦閒閒沒事的時候,就會一直呼叫display()

    glClearColor(1,1,1,1);

    //打光
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();
    return EXIT_SUCCESS;
}

按下F9執行,結果如下:


 4_各種形狀

#include <GL/glut.h>
float angle=0;
static void display(void)
{
    angle++;
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0);
    glPushMatrix(); //備份矩陣
        //glTranslatef(x,y,z); //移動
        glRotatef(angle,0,1,0); //轉動
        /*glutSolidTeapot(0.3); //茶壺
        //glutSolidCone(0.3,0.7,15,15); //錐體(底,高,Slices柳丁切,Stack堆疊)
        //glutSolidCube(0.5); //矩形(大小)
        glScaled(0.5,0.5,0.5);
        //glutSolidDodecahedron(); //十面體
        //glutSolidIcosahedron(); //十二面體
        //glutSolidOctahedron(); //八面體
        //glutSolidTetrahedron(); //四面體
        //glutSolidSphere(0.3,15,15); //球體(半徑,Slices,Stacks)
        //glutSolidTorus(0.3,0.7,10,10);
                 //甜甜圈(環狀的半徑,整個甜甜圈的半徑,sild剖面的線條,垂直剖面的線條)
        glutWireTorus(0.3,0.7,10,10); //網狀的甜甜圈*/
    glPopMatrix(); //還原矩陣
    glutSwapBuffers();
}

//打光
const GLfloat light_ambient[] = {0.0f,0.0f,0.0f,1.0f};
const GLfloat light_diffuse[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_position[] = {2.0f,5.0f,5.0f,0.0f};
const GLfloat mat_ambient[] = {0.7f,0.7f,0.7f,1.0f};
const GLfloat mat_diffuse[] = {0.8f,0.8f,0.8f,1.0f};
const GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat high_shininess[] = {100.0f};

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");

    //glutReshapeFunc(resize);
    glutDisplayFunc(display);
    //glutKeyboardFunc(key);
    glutIdleFunc(display); //電腦閒閒沒事的時候,就會一直呼叫display()

    glClearColor(1,1,1,1);

    //打光
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();
    return EXIT_SUCCESS;
}


按下F9後的各個呈現畫面(程式碼  執行結果)








 

 5_ T-R-T



#include <GL/glut.h>
float angle=0;

static void display(void)
{
    angle++;
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3d(1,0,0);
    glPushMatrix();   //備份矩陣
        glTranslatef(0,0.5,0);   //移動
        glutSolidTeapot(0.3);   //茶壺
    glPopMatrix();   //還原矩陣
    glPushMatrix();   //備份矩陣
        glRotatef(angle,0,1,0);   //轉動
        glutSolidTeapot(0.3);   //畫茶壺
    glPopMatrix();   //還原矩陣

    glutSwapBuffers();
}

//打光
const GLfloat light_ambient[] = {0.0f,0.0f,0.0f,1.0f};
const GLfloat light_diffuse[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat light_position[] = {2.0f,5.0f,5.0f,0.0f};
const GLfloat mat_ambient[] = {0.7f,0.7f,0.7f,1.0f};
const GLfloat mat_diffuse[] = {0.8f,0.8f,0.8f,1.0f};
const GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
const GLfloat high_shininess[] = {100.0f};

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");

    //glutReshapeFunc(resize);
    glutDisplayFunc(display);
    //glutKeyboardFunc(key);
    glutIdleFunc(display);   //電腦閒閒沒事的時候,就會一直呼叫display()
    glClearColor(1,1,1,1);

    //打光
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();
    return EXIT_SUCCESS;
}

按下F9執行,結果如下:

沒有留言:

張貼留言