期中考模擬練習:https://jsyeh.org/gl/
找範例中light程式碼:week06-0_sample
1. moodle下載 freeglut 拖到桌面
2. 把桌面\freglut\lib\libfreeglut.a 複製成 libglut32.a
3. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week06-0_sample
幫茶壺打光:week06-1_lighting
1. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week06-1_lighting
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06 lighting");
glutDisplayFunc(display);
glutMainLoop();
}
觀察課本打光範例Light Material.exe
1. 下載課本的範例 https://jsyeh.org/3dcg10 windows.zip(win32) 及 data.zip(data)
2. windows.zip 先解壓縮, data.zip 直接點開拉到windows資料夾3. 執行 Light Material.exe
4. 左上角視窗按右鍵可以換模型、左下角視窗按右鍵可以換材質
打光的法向量:week06-2_lighting_Normal3f
1. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week06-2_lighting_Normal3f
3. 貼上上一個程式碼(week06-1_lighting), 再加上四邊形並設定法向量
4. 在最上面宣告angle, 並在display上面裡加上程式碼
float angle = 0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle++, 0, 1, 0);//對Y軸旋轉
glBegin(GL_POLYGON);
glNormal3f(0, 0, 1); //打光的法向量
glVertex2f(-1, -1);
glVertex2f(+1, -1);
glVertex2f(+1, +1);
glVertex2f(-1, +1);
glEnd();
glutSolidTeapot( 0.3 );
glPopMatrix();
glutSwapBuffers();
5. main函式加上一行程是碼
glutIdleFunc(display);
6. 最後會讓打光的茶壺旋轉並且多一個四邊型
3D模型:week06-3_glm_obj_model
1. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week06-3_glm_obj_model
3. 貼上11行glut程式碼
4. 從課本範例 source.zip 中找到 transformation.c / glm.c / glm.h 三個檔案並拉出來
#include "glm.h" ///加的程式,使用glm的程式碼
GLMmodel * pmodel = NULL; ///加的程式,有顆指標,指到模型檔
drawmodel(void)
{
if (!pmodel) {
pmodel = glmReadOBJ("data/Al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
6. 把 glm.c / glm.h 拉到 Desktop\week06-3_glm_obj_model 目錄裡, glm.c改名為glm.cpp
7. 在week06-3_glm_obj_model 專案裡按右鍵新增 glm.cpp檔案
沒有留言:
張貼留言