(*^ω^*) 喵~Week11
➽ MAYA OBJ 模型檔
- 網址:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
- 下載 [source][data][win32][glut32.dll]
- [windows]解壓縮>>開啟[windows]資料夾>>將[data]壓縮裡的資料夾和[glut32.dll]拉入[windows]資料夾
- 點開 [data] 資料夾 >> 找一個OBJ檔用Notepad++觀看
- v 頂點
- vn 法向量
- vt 貼圖
- f 面(facet)

- 了解 glm
- #include "glm.h" //使用外掛,glm的外掛(glm.h 配 glm.c)
- GLMmodel* pmodel = NULL; //指標,指到資料結構OBJ模型
➽自己做出 Transformation
- 開啟一個 glut 檔案
- 將 [transformation.c] 全部複製過來
- 將[glm.c]更改為[glm.cpp]
- 將[glm.cpp]和[glm.h]拉到與專案同一層(圖一)
- 在codeblocks裡加入[glm.cpp](圖二)(圖三)
- 最後將[data]資料夾放到[freeglut]>>[bin]
 |
| 圖一 |
➽親手打造程式
- 複製之前的架構,再加入一點東西
- #include <GL/glut.h>
- #include "glm.h"//外掛
- GLMmodel * model=NULL;//指標
- void display()
- {
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- ///開始不一樣囉~
- if(model==NULL){///準備好模型
- model=glmReadOBJ("data/AL.obj");//讀入模型
- glmUnitize(model);//怕模型太大太小,改成Unit單位(-1~+1)
- glmFacetNormals(model);//計算facet的法向量(多個)
- glmVertexNormals(model, 90);//計算vertex的法向量(多個)
- }
- glmDraw(model,GLM_SMOOTH|GLM_MATERIAL);//畫圖
- glutSwapBuffers();
- }
- int main(int argc, char *argv[])
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("親手打造");
- glutDisplayFunc(display);
- glutMainLoop();
- }
 |
| 成果 |
- 加入打光~~
- #include <GL/glut.h>
- #include "glm.h"
- GLMmodel * model=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 };
- void display()
- {
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- if(model==NULL){
- model=glmReadOBJ("data/AL.obj");
- glmUnitize(model);
- glmFacetNormals(model);
- glmVertexNormals(model, 90);
- }
- glmDraw(model,GLM_SMOOTH|GLM_MATERIAL);
- glutSwapBuffers();
- }
- int main(int argc, char *argv[])
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("親手打造");
- glutDisplayFunc(display);
- ///打光函式
- glEnable(GL_DEPTH_TEST);
- 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_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
 |
| 出現了~阿呀!怎麼是背對的 |
- 轉正面
- glPushMatrix();
- glRotatef(180,0,1,0);//轉180度,向前~看~
- glmDraw(model,GLM_SMOOTH|GLM_MATERIAL);
- glPopMatrix();
 |
| 揭開神秘面紗~ |
沒有留言:
張貼留言