顯示具有 Week06 標籤的文章。 顯示所有文章
顯示具有 Week06 標籤的文章。 顯示所有文章

2019年4月11日 星期四

week06

網址:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
(1)到上面網址下載:data 、win32 glut.32dll source
重複之前的步驟:解壓縮windows.zip->拉data進windows ->複製glut32.dll ->貼上


(2)開啟source壓縮檔 將glm.c  glm.h lightmaterial.c三個拉出


(3)重複以前的步驟:搜尋freeglut->下載->解壓縮拖移到桌面->複製改檔名(libglut32.a)->
                                開啟codeblock新建一個新的GLUT project
(4)將上週的茶壺打光程式碼複製貼上
(5)用NotePad++開啟lightmaterial.c       


(6)ctrl+f可以搜尋關鍵字
    搜尋glm複製搜尋到的前三筆程式碼:



(7)複製到codeblock上


(8)將glm.c  glm.h拖移到剛剛codeblock新建的glut procject資料夾裡


(9)將glm.c的檔名改成glm.cpp

.
(10)右鍵新增files

(11)加入glm.cpp進去

(12)將下載的data放到ferrglut >bin裡面


(13)執行
 出現有光照的圖

#include <GL/glut.h> #include "glm.h" ///我們要讀入3D模型 第一步,使用GLM,glm.h要放在同一目錄裡 GLMmodel* pmodel = NULL; ///我們要讀入3D模型 第二步, GLMmode1 變數,等一下要讀入的3D模型 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 }; float angle=0; void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清畫面 if (!pmodel) { ///我們要讀入的3D模型 第三步,讀入3D模型 pmodel = glmReadOBJ("data/AL.obj"); ///我們要讀入的3D模型 第三步,讀入3D模型 if (!pmodel) exit(0); ///我們要讀入的3D模型 第三步,讀入3D模型 glmUnitize(pmodel); ///我們要讀入的3D模型 第三步,讀入3D模型 glmFacetNormals(pmodel); ///我們要讀入的3D模型 第三步,讀入3D模型 glmVertexNormals(pmodel, 90.0); ///我們要讀入的3D模型 第三步,讀入3D模型 } glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL); ///我們要讀入的3D模型 第三步,讀入3D模型 glutSwapBuffers(); } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("06160052"); ///顯示一個視窗 glutDisplayFunc(display); glutIdleFunc(display); glClearColor(1,0,0,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(); }

作業:(將maya的模型匯入codeblock)

(1)匯出obj檔:File->Export Selection
(2)選擇OBJ export

(3)將匯出的檔案拉近freeglut>bin裡面
(4)將圈起來的地方改成自己剛剛儲存的檔名



2019年3月29日 星期五

賴帥哥的電腦圖學筆記_Week05

Week05
開頭和之前一樣

->先到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 下載win32, data, glut32.dll 
->win32, data解壓縮後將所有資料放入windows資料夾
-> 打開Light Material.exe
->這次要調整的數值比較多
其中程式裡字型比較大的9行是我們需要調整的; 而字型比較小的9行則是固定的程式碼



->GLfloat light_pos
->GLfloat light_Ka   ---  a代表Ambient
->GLfloat light_Kd   ---  d代表Diffuse
->GLfloat light_Ks   ---  s代表Specular
環境光Ambient:是由光源發出經環境多次散射而無法確定其入射方向的光,即似乎來自所有方向。其特徵是入射方向和出射方向均為任意方向
漫射光Diffuse:來自特定方向,它垂直於物體時比傾斜時更明亮。一旦它照射到物體上,則在各個方向上均勻地發散出去,效果為無論視點在哪裡它都一樣亮,其特徵是入射方向唯一、出射方向為任意方向
鏡面光Specular:來自特定方向並沿另一方向反射出去,一個平行鐳射束在高質量 的鏡面上產生100%的鏡面反射,其特徵是入射方向和出射方向均唯一                                                                                                                                                                                              而GLfloat material_Ka等等材質數值定義
                                                                                                        了物體對環境光、漫反射光、鏡面光的反
                                                                                                        射(吸收)能力
                                                                                                        其中比較不一樣的GLfloat material_Ke
                                                                                                        表的是自體發光

我九歲_Week06

2019/3/8 week6

今天內容: 打光、3D模型OBJ、GLM讀入OBJ

/1/ 先下載解壓縮[data][win32] glut32.dll  source
在桌面創一個windows的資料夾,把解壓縮後的data、win32、glut32.dill 、source放進去


/2/到 https://www.transmissionzero.co.uk/software/freeglut-devel/
下載 Download freeglut 3.0.0 for MinGW 並解壓縮



/3/將freeglut資料夾的libfreeglut複製貼上 並改名為 libglut32.a


/4/在codeblocks開啟一個project
並將source裡的glm.c glm.h貼到codeblocks的資料夾內(glm.c改成glm.cpp)


/5/在codeblocks內的專案按右鍵選擇 Add files 選擇glm.cpp
會加入一個程式碼


/6/將data資料夾放進freeglut裡的bin資料夾即可



/7/執行程式碼


**程式碼**

#include <GL/glut.h> #include "glm.h" GLMmodel* pmodel = NULL; 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 }; float angle=0;///+++ void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!pmodel) { pmodel = glmReadOBJ("data/soccerball.obj"); if (!pmodel) exit(0); glmUnitize(pmodel); glmFacetNormals(pmodel); glmVertexNormals(pmodel, 90.0); } glmDraw(pmodel, GLM_SMOOTH); glutSwapBuffers(); } int main(int argc,char ** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("Week06"); glutDisplayFunc(display); glutIdleFunc(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(); }