2017年5月1日 星期一

week11 黃雪婷 上課筆記

課堂作業一:不用寫程式碼就創造出一個3d模型的app
(在google搜索3D exploration,選擇第一個連接,打開後下載1.81版本.)


(去小葉老師網站上下載data壓縮包並解壓縮,裡面有很多3d的模型)

(安裝好3d exploration後打開它,然後去打開data資料夾)

(將模型另存為save as,保存為.cpp格式)

(匯出選項選擇sample App,點擊ok)

(桌面上出現了car.cpp,表示模型變為程式碼了)(soccerball.cpp也是同理)





(以下再做soccerball.cpp的部分)
(建立一個openGL project,把自帶的main.cpp移除,再在soccerball的資料夾中複製剛才用soccerball模型變成的程式碼soccerball.cpp.成功後在codeblocks中點擊add files,把soccerball.cpp加進去,打開程式碼.因為程序語言太老,出現了無法編譯的部分,把那兩行註解掉就好了,程序還是可以正常執行)





課堂作業二:拆解模型並匯出
(海豚這個模型中有三只海豚,但是只勾選一只海豚就只能看見一只海豚,這就是把模型拆解了,然後把這個拆開的模型導出)(請保存為wavepoint.obj的格式)




(注意在保存的時候最下面的選項要選擇"visible object only",這樣就可以只導出一只海豚)


(把這些導出的模型程式碼放到data資料夾中)



課堂作業三:把導出的拆分模型放到GLUT project中

注意黑色的部分:pmodel = glmReadOBJ("data/dolphins1.obj");    (dolphins1是拆分模型第一部分的文件名稱,不能打錯,不然無法打開檔案)



重點:
GLMmodel* pmodel1 = NULL;
GLMmodel* pmodel2= NULL;
GLMmodel* pmodel3 = NULL;
(要添加新的模型)

#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel1 = NULL;
GLMmodel* pmodel2 = NULL;
GLMmodel* pmodel3 = NULL;
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        angle++;
        glRotatef(angle, 0,1,0);

        if (!pmodel1) {
        pmodel1 = glmReadOBJ("data/dolphins1.obj");
        if (!pmodel1) exit(0);
        glmUnitize(pmodel1);
        glmFacetNormals(pmodel1);
        glmVertexNormals(pmodel1, 90.0);
        }

        glmDraw(pmodel1, GLM_SMOOTH | GLM_MATERIAL);


        if (!pmodel2) {
        pmodel2 = glmReadOBJ("data/dolphins2.obj");
        if (!pmodel2) exit(0);
        glmUnitize(pmodel2);
        glmFacetNormals(pmodel2);
        glmVertexNormals(pmodel2, 90.0);
        }
        glPushMatrix();
            glTranslatef(1,0,0);
            glScalef(0.5,0.5,0.5);

            glmDraw(pmodel1, GLM_SMOOTH | GLM_MATERIAL);
        glPopMatrix();

        glPushMatrix();
        glTranslatef(0.4,0,0);
            glScalef(1,1,1);
        glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();
    glutSwapBuffers();
}


(利用期中考之前學過的10個函式,來使模型縮放,移動,最終達成以下效果)

沒有留言:

張貼留言