2019年3月28日 星期四

電腦圖學W6 : 打光&模型

一. 主題 : 打光 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(); }

5.執行出來的結果。



模型OBJ檔


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加入之後執行就完成了。



回家作業

1.先開啟MAYA,創造一個3D物件。之後點左上角的 File → Export all 。



2.儲存位置選到 data 資料夾 ,副檔名記得改成 OBJ檔。



3.回到CodeBlocks,將pmodel = glmReadOBJ("data/porsche.obj"); ,改成剛剛儲存的檔名
pmodel = glmReadOBJ("data/螺絲起子.obj"); 執行之後就完成了。

沒有留言:

張貼留言