因晚到,所以直接跟著開始第二步
先去上課用軟體下載freeglut的檔案,並改好裡面需更改內容
還有下載source.zip,data.zipdata.zip 分別都解壓縮
把source裡面的glm.c和glm.h,transformation.c丟到week11的檔案裏面
打開transformation.c的程式用Edit With Notepad++打開
把裡面程式碼全部複製貼上codeblocks
glm.c改名glm.cpp 後在codeblocks左邊條列部分week11按右鍵add file 把glm.cpp加入
把 data.zip 裡的檔案解壓縮後 放入執行目錄桌面\freeglut-bin裡面
現在要親手打造20行程式碼
#include "glm.h" //要雙引號用同目錄的.h檔, 使用外掛
GLMmodel *pmodel=NULL;//使用指標pmodel
void drawmodel(void)
{
if (!pmodel) {
pmodel = glmReadOBJ("data/porsche.obj");//porsche可以改成Al會變成人的模型
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 我的3D模型");
glutDisplayFunc(display);
glutMainLoop();
}
接下來要把物件打光
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上面
glEnable(GL_DEPTH_TEST);//如果少了這行3D深度測試就會破圖
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);
上面的要丟在 glutMainLoop();上面
因為打光後發現圖片是背面的 我們要把模型轉方向
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(180,0,1,0);
drawmodel();
glPopMatrix();
glutSwapBuffers();
}
現在要把模型換成鋼彈的
過程中出了點問題,所以這不是完整品彈有形狀了
老師後來給我們一個剛彈的直接程式碼
滑鼠按右鍵可以改變動作,按鍵盤的123等等數字可抵把身體部位消失。
沒有留言:
張貼留言