一. 主題 : 打光 part 1
二. 主題 : 模型OBJ檔
三. 實作 : GLM vs. OBJ
四. 回家作業
一.打光PART 1
1.先到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/中,接著下載[source],[data],[win32],[glut32.dll],解壓縮之後放到同一個資料夾中。
2.打開Light & Material,在視窗左上方可以改變物體,左下方改變材質,右上改變光線顏色,右下改變材質顏色。
打光實作
1.先到https://www.transmissionzero.co.uk/software/freeglut-devel/裡面,點擊 Download freeglut 3.0.0 for MinGW 。
2.解壓縮之後,打開 freeglut 資料夾裡的 lib 資料夾,將裡面的 libfreeglut.a 複製,直接貼上,重新命名為 : libglut32.a ,結果如下圖。
3.打開 CodeBlocks → File → New → Project...→ 選擇 GlutProject → 打檔名.設定路徑。
4.修改裡面的程式碼,程式碼如下。
#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.0f, 0.0f, 0.0f, 0.0f }; const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat high_shininess[] = { 100.0f }; void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glutSolidTeapot(0.3); glutSwapBuffers(); } int main(int argc,char**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("week06"); glutDisplayFunc(display); glClearColor(1,1,1,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); 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(); }
#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.0f, 0.0f, 0.0f, 0.0f }; const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat high_shininess[] = { 100.0f }; void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glutSolidTeapot(0.3); glutSwapBuffers(); } int main(int argc,char**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("week06"); glutDisplayFunc(display); glClearColor(1,1,1,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); 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(); }
1.把一開始下載的 resouce 解壓縮之後, 用Notepad++ 打開 transformation.c 利用 Ctrl+F 尋找關鍵字 "glm"找到 #include "glm.h" 複製貼到剛剛的程式碼裡面。
2.再尋找下一個,找到GLMmodel* pmodel = NULL; 把它貼到 #include "glm.h"下方。
3.再尋找下一個,將
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);
全部複製貼到 display函式裡面。
4.將 data 資料夾丟入freeglut 資料夾裡的 bin 資料夾。
5. 把 glm.c 和 glm.h 的檔案複製到 CodeBlocks的專案資料夾裡 glm.c 檔名改成glm.cpp。
6.到CodeBlocks裡右鍵點擊專案名稱→選擇 add files→選擇glm.cpp加入之後執行就完成了。
2.再尋找下一個,找到GLMmodel* pmodel = NULL; 把它貼到 #include "glm.h"下方。
3.再尋找下一個,將
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);
4.將 data 資料夾丟入freeglut 資料夾裡的 bin 資料夾。
5. 把 glm.c 和 glm.h 的檔案複製到 CodeBlocks的專案資料夾裡 glm.c 檔名改成glm.cpp。
6.到CodeBlocks裡右鍵點擊專案名稱→選擇 add files→選擇glm.cpp加入之後執行就完成了。
沒有留言:
張貼留言