下載 source data win32 glut32.dll

打開OBJ 檔 用Notepad++ 打開
了解 v: vertex f: face

從source 中 把glm.c glm.h transformations.c 拉到下載
打開 Notepad++


解釋
#include "glm.h"///解釋: 使用外掛 glm的外掛 glm.h 配 glm.c (.cpp)
GLMmodel* pmodel = NULL;//解釋: 指標,指到資料結構 OBJ模型

打開openGL 把程式碼刪掉
把 glm.c glm.h 加到 week_11 把 glm.c改成glm.cpp
因為這是舊版的 改成cpp 比較好讀進去

在week_11按右鍵 Add files 新增 glm.cpp

在 freeglut 中 的 bin 新增 data

就可以產生 3D圖

親手做的程式
if (model==NULL) model = glmReadOBJ("data/Al.obj"); ///讀入模型
glmUnitize(model); ///怕模型太大太小,改成Unit單位大小
glmFacetNormals(model); ///計算 facet 的法向量s
glmVertexNormals(model, 90); ///計算 vertex的法向量s
glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);

打光, 陣列有光的參數
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 hight_shininess[] ={ 100.0f };
void display()
打光的程式
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_POSITION, hight_shininess);

打開OBJ 檔 用Notepad++ 打開
了解 v: vertex f: face

從source 中 把glm.c glm.h transformations.c 拉到下載
打開 Notepad++


解釋
#include "glm.h"///解釋: 使用外掛 glm的外掛 glm.h 配 glm.c (.cpp)
GLMmodel* pmodel = NULL;//解釋: 指標,指到資料結構 OBJ模型

打開openGL 把程式碼刪掉
把 glm.c glm.h 加到 week_11 把 glm.c改成glm.cpp
因為這是舊版的 改成cpp 比較好讀進去

在week_11按右鍵 Add files 新增 glm.cpp

在 freeglut 中 的 bin 新增 data

就可以產生 3D圖

親手做的程式
if (model==NULL) model = glmReadOBJ("data/Al.obj"); ///讀入模型
glmUnitize(model); ///怕模型太大太小,改成Unit單位大小
glmFacetNormals(model); ///計算 facet 的法向量s
glmVertexNormals(model, 90); ///計算 vertex的法向量s
glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);

打光, 陣列有光的參數
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 hight_shininess[] ={ 100.0f };
void display()
打光的程式
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_POSITION, hight_shininess);
沒有留言:
張貼留言