步驟一 : 開啟 CodeBlocks
步驟二 : 建立新專案
步驟三 : 專案類型選擇GLUT Project
步驟四 : 出現畫面上的視窗,點選 next
步驟五 : 專案名稱打上「學號」,儲存目的為桌面,點選 Next
步驟六 : 到FB下載 freeglut
步驟七 : 回到CodeBlocks,找出 freeglut下載位置,點選 Next
步驟八 : 點選 Finish
步驟九 : 開始執行程式
程式 :
#include <GL/glut.h>
static void display(void)
{
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix();//備份矩陣
//glTranslatef(x,y,z);//移動
//glRotatef(angle,x,y,z);//旋轉
glutSolidTeapot(0.3);
glPopMatrix();//還原矩陣
glutSwapBuffers();
}
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 };
/* Program entry point */
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
//glutReshapeFunc(resize);
glutDisplayFunc(display);
//glutKeyboardFunc(key);
//glutIdleFunc(idle);
glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
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();
return EXIT_SUCCESS;
}
- 作業二 : 旋轉打光
程式 :
#include <GL/glut.h>
float angle=0;//要重畫
static void display(void)
{
angle++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix();//備份矩陣
//glTranslatef(x,y,z);//移動
glRotatef(angle,0,1,0);//旋轉
glutSolidTeapot(0.3);
glPopMatrix();//還原矩陣
glutSwapBuffers();
}
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 };
/* Program entry point */
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
//glutReshapeFunc(resize);
glutDisplayFunc(display);
//glutKeyboardFunc(key);
glutIdleFunc(display);
glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
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();
return EXIT_SUCCESS;
}
glutSolidCone(0.8,0.3,30,30);",變成扁錐形。
步驟二 : 修改數值"glutSolidCone(0.3,0.3,30,30);",變成錐形。
步驟三 : 修改作業二的程式碼" glutWireCone(0.3,0.8,5,30);",變成網狀錐形。
步驟四 : 類似步驟,做成球型。
修改一行"glutSolidSphere(0.7,30,30);"
修改數值"glutWireSphere(0.7,6,30);"
修改數值"glutWireSphere(0.7,6,8);"- 作業四 : 上下層茶壺
程式 :
#include <GL/glut.h>
float angle=0;//要重畫
static void display(void)
{
angle++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix();//備份矩陣
glTranslatef(0,0.5,0);//移動
glutSolidTeapot(0.3);
glPopMatrix();//還原矩陣
glPushMatrix();//備份矩陣
glRotatef(angle,0,1,0);//旋轉
glutSolidTeapot(0.3);
//glutWireCone(0.3,0.8,5,30);
glPopMatrix();//還原矩陣
glutSwapBuffers();
}//下方程式碼不變





















沒有留言:
張貼留言