Step01:
1.下載Data,win32
2.windows.zip解壓縮
data.zip把data資料夾移入windows
主題:Light Material.exe
左上:左鍵=>drag旋轉
左上:右鍵=>切換模型
左下:右鍵=>切換Material
Step02:
1.用ctrl+f尋找const
2.保留
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 };
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);
3.寫入
#include <GL/glut.h>
void Display(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06_Light");
glutDisplayFunc(Display);
glutMainLoop();
}
4.把
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);
移到這2行程式中間
glutCreateWindow("week06_Light");
glutDisplayFunc(Display);
如下
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06_Light");
glutDisplayFunc(Display);
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();
}
5.執行結果
Step03:
1.加入上週程式
float x=150,y=150,z=0,scale=1.0;
int oldx=0,oldy=0;
void keyboard(unsigned char key,int mouseX,int mouseY){
}
void mouse(int button,int key,int mouseX,int mouseY){
oldx=mouseX;oldy=mouseY;
}
void motion(int mouseX,int mouseY){
if(mouseX-oldx>0) scale*=1.01;
if(mouseX-oldx<0) scale*=0.99;
oldx=mouseX;oldy=mouseY;
Display();
}
在Display()加入
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
2.執行結果
Step04_轉動:
1.設值angle=0;
2.Display()加入glRotatef(angle,0,1,0);
3.改寫motion()加入
angle+=(mouseX-oldx); //轉動
註解// if(mouseX-oldx>0) scale*=1.01;
// if(mouseX-oldx<0) scale*=0.99;
如下:
void motion(int mouseX,int mouseY){
angle+=(mouseX-oldx); //轉動
// if(mouseX-oldx>0) scale*=1.01;
// if(mouseX-oldx<0) scale*=0.99;
oldx=mouseX;oldy=mouseY;
Display();
}
4.執行結果
Step05:
1.設值int now=1;///1移動2轉動3縮放
2.修改motion()
void motion(int mouseX,int mouseY){
if(now==1){
x+=(mouseX-oldx);y+=(mouseY-oldy);
}
else if(now==2)
angle+=(mouseX-oldx);
else if(now==3){
if(mouseX-oldx>0) scale*=1.01;
if(mouseX-oldx<0) scale*=0.99;
}
oldx=mouseX;oldy=mouseY;
Display();
}
3.在kerboard加入
沒有留言:
張貼留言