2024年3月28日 星期四

電腦圖學week06

 ##期中考題

1.期中考試練習網址: https://jsyeh.org/gl/

2.必備10函式,作答評分完會給答案



 ##week06-0_sample

1. 桌面有「葉正聖老師上課用軟體」 freeglut 安裝(拉到桌面),再把 lib的 libfreeglut.a 複製成 libglut32.a

2. CodeBlocks File-New-Project, GLUT專案, week06_0_sample

3.不刪程式,ctrl+F加入尋找light並加入



##week06-1_lighting

1. 貼上GLUT的11行程式

2.貼上剛剛week06-0_sample找到打光的程式碼




3.打光的陣列宣告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 };


4.打光的12+2行程式碼:

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




5.代表光的位置:

const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };



6.代表光的顏色(是光的顏色改變,茶壺一樣是白色):

const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 0.0f, 1.0f };




##課本範例

1. https://jsyeh.org/3dcg10 下載data win32

2.解壓縮windows.zip

3.將data.zip中的data資料夾加入解壓縮後的windows資料夾

4.開啟windows資料夾中的Light Material

5.調整數值



##week06-2_lighting_glNormal3f

1. 把剛剛的程式week06-1_lighting拿來用

2.加上四邊形,有設定法向量

3.加入程式碼:

```

float angle=0;

```

glPushMatrix();

        glRotatef(angle++, 0, 1, 0);///對Y軸旋轉

        glBegin(GL_POLYGON);

            glNormal3f(0,0,1);///打光的法向量

            glVertex2f(-1,-1);

            glVertex2f(+1,-1);

            glVertex2f(+1,+1);

            glVertex2f(-1,+1);

        glEnd();

        glutSolidTeapot(0.3);

    glPopMatrix();

    glutSwapBuffers();

```(記得在main函式裡要加glutIdleFunc(display);)

    glutIdleFunc(display);

    glEnable(GL_DEPTH_TEST);





##week06-3_glm_obj_model

1. 貼入11行程式碼

2.從課本範例學習source.zip有三個程式檔:transformation.c glm.h glm.c解壓縮

3.要做專案設定:

3.1.把glm.h到桌面\week03-3_glm_obj_model目錄裡

3.2.把glm.c到桌面\week03-3_glm_obj_model目錄裡,改檔名glm.cpp

3.3.在專案裡按右鍵Add Files,加入glm.cpp

4.1.要#include "glm.h"

4.2.要GLMmodel* pmodel = NULL;

4.3要貼上drawmodel()的程式

5.用Notepad++開啟transformation.c研究他的程式碼,關鍵字gim找到程式碼

6.GLMmodel* pmodel = NULL;




7.






沒有留言:

張貼留言