2018年4月9日 星期一

Week07 呆江的筆記

下載3DExploration (1.觀看3D模型用 2.存檔<可存 .cpp >)

建立自己的讀取3D模型程式
使用範例:jsyeh.org/3dcg10
glut32.dll , data.zip , source.zipsource.zip 內含 glm.h , glm.c ...)

先將 source.zip 內的 glm.c 和 transformation.c 副檔名更改成 .cpp ( glm.cpp )
新增GLUT專案( week07_glm )
將main.cpp清空
匯入glm.cpp 和 transformation.cpp

§因為是舊程式碼,需先更改code:blocks設定( 螢光筆處取消∨ )



將data資料夾複製到 freeglut -> bin 內

執行結果:


嘗試自己打程式碼:

#include "glm.h" ///在 source.zip 內

GLMmodel* pmodel = NULL; ///指標,將pmodel指向空值

void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    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);
(來自 transformation.cpp )

    glutSwapBuffers();
}

int main(int argc,char** argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week07");

    glutDisplayFunc(display);
    glutMainLoop();
}

執行結果:


轉檔 OBJ格式 重點:

頂點 v(x, y, z)
貼圖 vt(x, y)
法向量 vn(nx, ny, nz)
面 f

期中重點:
glPushMatrix(); ///備份矩陣

    glTranslatef(x, y, z); ///移動
    glRotatef(angle, x, y, z); ///旋轉
    glScalef(x, y, z); ///放大縮小

    glBegin(GL_POLYGON); ///開始畫
        glNormal3f(nx, ny, nz); /// 法向量
        glTexCoord2f(tx, ty); ///貼圖座標
        glColor3f(r, g, b); ///顏色
        glVertex3f(x, y, z); ///頂點
    glEnd(); ///結束畫
glPopMatrix(); ///還原矩陣

回家測試:
將mmd的pmd檔轉成obj
使用模組:Sour式初音ミク_Breath You Ver.1.00
§需要將obj檔和mtl檔放在freeglut ->bin 內

沒有留言:

張貼留言