2017年4月11日 星期二

Week 08 邱

#第08週上課重點

         1. 主題:階層移動
         2. T-R-T
         3. 打光
         4. 機器人
-------------------------------------------------------------------------------------------------------------------------
複習期中考題(矩陣):

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

打光茶壺

#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( );
      //  glTranslated(-2.4,1.2,-6);
      //  glRotated(60,1,0,0);
      //  glRotated(a,0,0,1);
        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(idle);

    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;
}

執行截圖:



打光旋轉茶壺

#include <GL/glut.h>

float angle = 0;    ///要重畫
static void display(void)
{
    angle++;   ///重新呼叫display( )是預設有人擋住,才重畫
    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( );
      //  glTranslated(-2.4,1.2,-6);
       glRotated(angle,0,1,0); ///以y軸做旋轉
      //  glRotated(a,0,0,1);
        glutSolidTeapot(0.3);
    glPopMatrix( );


    glutSwapBuffers( );
}

const GLfloat light_ambient[ ]  = { 0.0f0.0f0.0f1.0f };
const GLfloat light_diffuse[ ]  = { 1.0f1.0f, 1.0f1.0f };
const GLfloat light_specular[ ] = { 1.0f1.0f1.0f1.0f };
const GLfloat light_position[ ] = { 2.0f5.0f5.0f0.0f };

const GLfloat mat_ambient[ ]    = { 0.7f0.7f0.7f1.0f };
const GLfloat mat_diffuse[ ]    = { 0.8f0.8f0.8f1.0f };
const GLfloat mat_specular[ ]   = { 1.0f1.0f1.0f1.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);

    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;
}

執行截圖:





甜甜圈

#include <GL/glut.h>

float angle = 0;    ///要重畫
static void display(void)
{
    angle++;   ///重新呼叫display( )是預設有人擋住,才重畫
    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( );
      //  glTranslated(-2.4,1.2,-6);
       glRotated(angle,0,1,0); ///以y軸做旋轉
      //  glRotated(a,0,0,1);
        glutWireTorus(0.2,0.5,5,30);  ///glutWireToris(小圈半徑,大圈半徑,大圈線條數,小圈數量);
    glPopMatrix( );


    glutSwapBuffers( );
}

const GLfloat light_ambient[ ]  = { 0.0f0.0f0.0f1.0f };
const GLfloat light_diffuse[ ]  = { 1.0f1.0f, 1.0f1.0f };
const GLfloat light_specular[ ] = { 1.0f1.0f1.0f1.0f };
const GLfloat light_position[ ] = { 2.0f5.0f5.0f0.0f };

const GLfloat mat_ambient[ ]    = { 0.7f0.7f0.7f1.0f };
const GLfloat mat_diffuse[ ]    = { 0.8f0.8f0.8f1.0f };
const GLfloat mat_specular[ ]   = { 1.0f1.0f1.0f1.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);

    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;
}

執行截圖:






沒有留言:

張貼留言