(1) 到 http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載 [data] [win32] [glut32.dll] 三個檔案
(2) 將下載好的壓縮檔 [windows] 和 [data] 解壓縮,
並將 [glut32.dll] 和 [data] 複製到window資料夾裡
(3) 開啟 Projection.exe 並試著操作看看
gluperspective(48.0, 1.12, 1.0, 1.9)
aspect 代表 人物的大小比例
zNear 代表 前方視野的距離範圍
zFar 代表 後方視野的距離範圍
--------------------------------------------------------------------------
(1) 在 Codeblocks 開啟 GLUT 程式
到moodle下載freeglut-MinGW-3.0.0-1.mp.zip > 解壓縮 > freeglut > lib >
複製libfreeglut.a > 貼上並重新命名為libglut32.a > 開啟Codeblocks > File >
New > Project > GLUT
(2) 程式碼的介紹
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL); //打開 Material
glEnable(GL_LIGHTING); //打開lighting
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); //打光的設定
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
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); //設定Material
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop(); //主要迴圈
█ 若關閉lighting ( 移除 glEnable(GL_LIGHTING); 程式碼 )
█ 若關閉Material ( 移除 glEnable(GL_COLOR_MATERIAL); 程式碼 )
█ 鏡頭拍攝方向的改變
glCullFace(GL_BACK);
glCullFace(GL_FRONT);
█ 攝影機和投影矩陣的設定
glutReshapeFunc(resize);
static void resize(int width, int height)
{
const float ar = (float) width / (float) height;
// ar = aspect ratio 長寬比
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity() ;
}
(3) 加入程式碼,可以以自訂的角度看模型
gluLookAt (0.3,10,0.3 ,0,0,-6 ,0,1,0);
(4) 加入程式碼,可以利用滑鼠自由調整看模型的角度
#include <math.h> //為了執行cos()和sin()
void motion(int x,int y)
{
float angle =x*3.1415926/180.0;
float cameraY=(y-300)/100.0;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(5*cos(angle), cameraY, 5*sin(angle)-6, 0, 0, -6, 0, 1, 0);
glutPostRedisplay(); //每次設定好就display一次
}
glutMotionFunc(motion);














沒有留言:
張貼留言