1. 期中考試練習網址: https://jsyeh.org/gl/
2. 研究打光
step1: 下載 freeglut-MinGW-3.0.0-1.mp.zip
step2: 進到資料夾,把檔案 freeglut 拉到桌面
step3: 點進 freeglut 👉 lib 資料夾
step4: 複製 libfreeglut.a 並且改名為libglut32.a
step5: 開啟code blocks
step6: 選擇File 👉 new 👉 project 👉 GLUT 👉 專案名稱:week06- 0_sample_code 👉 路徑選擇:桌面-freeglut 👉 執行 (Build and Run)
step7: 研究一下 main.cpp 程式碼177行
step8: 20行+8行
step9: 開新專案,專案名稱: week06-1_lighting
step10: 貼上程式碼
👉 打光相關呼叫函式
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();
👉 打光相關矩陣程式碼
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 };
3. 下載課本的範例 https://jsyeh.org/3dcg10/ 👉 [source][data][win32]
4. glNormal3f 範例
step1: 開新專案,專案名稱: week06-2_lighting_glNormal3f
step2: 複製06-1的程式碼,再新增程式碼
👉 display 加
glPushMatrix();
glRotatef(angle++, 0, 1, 0);
glScalef(0.8, 0.8, 0.8);
glBegin(GL_POLYGON);
glNormal3f(0, 0, 1);
glVertex2f(-1, -1);
glVertex2f(+1, -1);
glVertex2f(+1, +1);
glVertex2f(-1, +1);
glEnd();
glPopMatrix();
👉 main 加
glutIdleFunc(display);
5. glm 範例
step1: 開新專案,專案名稱: week06-3_glm_obj_model
step2: 參考課本範例 source
step3: 貼上11行程式碼
#include "glm.h" ///加的程式,使用glm的程式碼
GLMmodel * pmodel = NULL; ///加的程式,有顆指標,指到模型檔
void drawmodel(void) ///讀模型、畫模型
{
if(!pmodel){
pmodel = glmReadOBJ("data/porsche.obj");
if(!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
step4: 準備檔案,從課本範例的 source
👉 glm.h 放到專案目錄
👉 glm.c 放到專案目錄,改名為 glm.cpp
👉 到專案,在專案名稱上按右鍵,Add File 將glm.cpp 加入專案
👉 將課本範例的 data 資料夾,複製到 freeglut/bin
step5: 修改程式碼
void drawmodel(void) 👉 pmodel = glmReadOBJ("data/Al.obj");
void display() 👉 drawmodel(); ///glutSolidTeapot( 0.3 );
沒有留言:
張貼留言