1. File-New-Project, GLUT專案(把 freeglut 準備好)
1.1. source.zip 裡: glm.h 放專案: 桌面 week11_model(在freeglut裡)
1.2. glm.c(改成glm.cpp) 放專案: 桌面 week11_model
1.3. transformation.c 複製內容, 到我們的main.cpp裡
1.4. 在 Codeblocks裡, 左邊 Add File, glm.cpp加入
2. 放入我們的 data 模型 (先放 桌面\freeglut\bin裡)
Codeblocks就有 transformation 的模型跑出來了! (程式執行時便會找到 data\prosche.obj 模型)
畫出保時捷
3. 我們開始寫自己的 glm 程式
3.1. #include "glm.h" //使用 glm.cpp 外掛
3.2. GLModel * pmodel = NULL; //pmodel 指標 (一個指標讀一個模型)
3.3. void drawmodel() 這個函式讀入OBJ, 調大
3.4. display() 裡, 呼叫 drawmodel() 即可
程式碼:
#include "glm.h" ///使用 glm.cpp 的外掛
GLMmodel* pmodel = NULL; ///pmodel指標
void drawmodel(void)
{ //使用範例的程式
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);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawmodel(); ///使用範例的程式
glutSwapBuffers();
}
int main( int argc, char** argv )
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutMainLoop();
}
加入打光程式碼 ( blog第10週有程式碼 ), 讓保時捷成功出現色彩, 且出現的是正面。
4. 整合打光
4.1. #
程式碼:
#include "glm.h"
GLMmodel* pmodel = NULL;
void drawmodel(void)
{
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);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(180, 0,1,0);
drawmodel(); ///使用範例的程式
glPopMatrix();
glutSwapBuffers();
}
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 };
int main( int argc, char** argv )
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week11");
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);
glutDisplayFunc(display);
glutMainLoop();
}
讀進老師給的鋼彈檔案👉下載OpenCV(按第二個選項, 其他不動直接下一步)👉裝好 OpenCV, Codeblocks重開👉打開鋼彈程式碼
5. Maya 變出 OBJ檔 (youtube: Maya OBJ)
5.1. https://youtu.be/D4a7cNFF9kQ
5.2. 你要能切割模型、選取、匯出
5.3. 老師給大家一個 zip 檔,裡面有把 gundam 拆開
5.4. 分別把模型讀進來





沒有留言:
張貼留言