2021年5月3日 星期一

我不想出錢 week11












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. 分別把模型讀進來







沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...