2023年3月15日 星期三

辰_電腦圖學 Week 04

 step01-1 下載上課檔案

下載 網站( https://jsyeh.org/3dcg10/ )

下載檔案及名稱:1. data.zip、2. win32.zip、3. glut32.dll

解壓縮

windows.zip => 獨立解出一個資料夾

data.zip => 將data解壓縮到window資料夾內

執行時可移動xyz的座標


本週上課內容為"旋轉 Rotation"

x軸旋轉時




y軸選轉時


z軸旋轉時



很像右手安培定則,想像z軸面向我們而來,x軸即為水平線,y軸為垂直線


XY軸一起轉


#include <GL/glut.h>
  
float  angle=0;
void display()
    {
        glClear( GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT)
        glPushMatrix();
            glRotatef(angle,0,1,0);
            glutSolidTeapot( 0.3 );
        glPopMatrix();
        glutSwapBuffers();
        angle++;
           }
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
燈光

#include <GL/glut.h>

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

void mylight()

{

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


}

float  angle=0;

void display()

    {

        glClearColor(1,1,1,1);


        glClear( GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);

        glPushMatrix();

            glRotatef(angle,0,1,0);

            glColor3f(1,1,0);

            glutSolidTeapot( 0.3 );

        glPopMatrix();

        glutSwapBuffers();

        angle++;

           }

int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week04");


    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}




第三節課
矩陣


打開車子的那個檔案 開兩個 改變程式碼順序
會發現調整參數時 旋轉中心轉 一個是繞著車子轉



沒有留言:

張貼留言