先劃出一個茶壺
加上打光的程式碼 複製貼上
const
GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
最後在最後面加上
myLight();
即可跑出立體的茶壺
將
void keyboard(unsigned char key, int x, int
y)
{
printf("%c %d %d\n", key, x, y);
if(key=='a') angleX+=3;
if(key=='b') angleX-=3;
glutPostRedisplay();
}這段keyboard的程式碼改成
void mouse(int button, int state, int x,
int y)
{
printf("%d %d %d %d\n", button, state, x, y);
startX=x;
}
void motion(int x, int y)
{
printf("%d %d\n", x, y);
angleX= x -startX;
glutPostRedisplay();
}
用滑鼠在動
上面的函數加上一個startX=0.
以及最後面把//glutKeyboardFunc(keyboard);
改成
glutMouseFunc(mouse);
glutMotionFunc(motion);
即可用滑鼠左右移動控制茶壺
加入y軸的函數
float angleY=0, startY=0;
再將
void mouse(int button, int state, int x,
int y)
void motion(int x, int y)
void display()
中加入y軸
即可上下旋轉
最後
將
前面函數多加一個
float m[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0,
0,0,0,1};
再將void display()中
glRotatef(angleX, 0,-1,0);
glRotatef(angleY, -1,0,0);
改成
float dist = sqrt(angleX*angleX +
angleY*angleY);
glRotatef( dist, -angleY ,-angleX, 0);
glMultMatrixf(m);
glGetFloatv(GL_MODELVIEW_MATRIX ,m);
將
angleX = x - startX; startX=x;
angleY = y - startY; startY=y;
原本為+=的地方改成=
運算即可變得較簡單
不會因為每次轉動而累積
大功告成!!
沒有留言:
張貼留言