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行```cppconst 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 拿來用
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() 的函式
```cppdrawmodel(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);}```
沒有留言:
張貼留言