2014年5月30日 星期五

Week15: (2)用陣列及內插法創造很多個角度

Week15: (2)用陣列及內插法創造很多個角度
#include <GL/glut.h>
float a = 0; //內插法比重 

//有很多個角度都要做內插法怎麼辦? 利用陣列, 就可以存很多個角度了 
float angle[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //用來轉動的角度,由angleOld, angleNew計算出 
float angleOld[20] = {0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //舊的角度,用來做內插法 
float angleNew[20] = {90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //新的角度,用來做內插法 
void display()
{
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glPushMatrix();
      glRotatef(angle[0], 0,0,1);
      glutSolidTeapot(0.3);
     glPopMatrix();
     glPushMatrix();
      glTranslatef(0.5, 0,0);
glRotatef(angle[1], 0,0,1);
glutSolidTeapot(0.3);
     glPopMatrix();
     glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if (key == 'r'){
a += 0.1; //比重一直增加,角度才會變化 
for( int i=0; i<=20; i++){ //全部打出來太遜了,  用for可以直接打20個,比葉問還厲害! 
angle[i] = angleOld[i] * (1-a) + angleNew[i] * a;
}
}
glutPostRedisplay();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week15");
glutKeyboardFunc(keyboard);
glutDisplayFunc(display);
glutMainLoop();
}


沒有留言:

張貼留言