建立自己的讀取3D模型程式
使用範例:jsyeh.org/3dcg10
glut32.dll , data.zip , source.zip( source.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 內
沒有留言:
張貼留言