2024年3月28日 星期四

罐頭's 電腦圖學日記 Week06

  week06  

##期中考題目

1. 期中考題 jsyeh.org/gl 會用 Moodle 考

2. 模擬練習

##week06-0_sample

0. 桌面安裝 freeglut , 把 lib 的 libfreeglut.a 複製成 libglut32.a

1. File-New-Project , GLUT 專案

2. Ctrl-F 找程式碼 light  , 找到程式碼 , 有兩大塊: 宣告、函式

 

//8行
```cpp
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 };
```

 

 //12+2行
 ```cpp
 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);
 ```


##week06-1_lighting

1. File-New-Project , GLUT 專案 , week06-1_lighting

2. 貼上 GLUT 11行程式(Github)

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

```cpp
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
///這裡,放打光的陣列宣告8行
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week06-1_lighting");
    glutDisplayFunc(display);
    ///這裡,放打光的12+2行程式碼
    glutMainLoop();
}
```

4. 執行時 , 發現茶壺暗暗的 , 因為它背光」, 要改一下光線的位置 position

5. 改完 12行 { 2.0f, 5.0f, -5.0f , 0.0f }; (紅色框起來的) 改變光源的位置 , 如下圖

6. 改完 10行 { 1.0f, 1.0f, 0.0f , 1.0f }; (紅色框起來的) 改變光源的顏色 , 如下圖


#看課本範例

1. 請到 https://jsyeh.org/3dcg10 下載課本範例 source data win32 

2. windows.zip 解壓縮 => data.zip點開 => 將data資料夾複製到windows裡

3. 下載 \ windows \ Light Material.exe 點開

4. data.zip => 下載 \ windows \  一堆模型檔



##week06-2_lighting_glNormal3f

1. File-New-Project , GLUT 專案 , week06-2_lighting_glNormal3f

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





##week06-3_glm_obj_model

1. File-New-Project , GLUT 專案 , week06-3_glm_obj_model

2. 貼上11行GLUT程式

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

4. 要將專案做設定

4.1. 把 glm.h 放到桌面 \week06-3_glm_obj_model 目錄裡

4.2. 把 glm.c 放到桌面 \week06-3_glm_obj_model 目錄裡 , 改檔名 glm.cpp

4.3. 在專案裡按右鍵 Add Files , 加入 gim.cpp

4.4. 要把 data 資料夾 放到 桌面 \ freeglut \ bin 目錄裡

5. 用 Notepad++ 開啟 transformation.c , Ctrl-F 找關鍵字 glm , 找到程式碼

5.1. #include "glm.h"

5.2. GLMmodel* pmodel = NULL;

5.3. drawmodel() 的函式

```cpp
drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("data/Al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
```

5.4. 把茶壺換成 drawmodel() (第20行)












沒有留言:

張貼留言