Week14切換關節
1.先裝Git把專案clone下載
2.今天的程式:timer,先把freeglut裝一次
程式碼
glutTimerFunc(等多久,timer,參數)
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)
{
glutTimerFunc(500,timer,t+1);///設定下一個鬧鐘
angle +=90;
glutPostRedisplay();///重劃畫面
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14");
glutDisplayFunc(display);
glutTimerFunc(2000, timer, 0);///設定timer函式
glutMainLoop();
}
按滑鼠開始計時
第二個程式碼用鍵盤撥放
///week14-2用鍵盤撥放
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)
{
glutTimerFunc(500,timer,t+1);///設定下一個鬧鐘
angle +=90;
glutPostRedisplay();///重劃畫面
}
void keyboard(unsigned char key, int x, int y)
{
glutTimerFunc(0,timer,0);
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutTimerFunc(2000, timer, 0);///設定timer函式
glutMainLoop();
}
3.打開excel示範
現在的角度的公式alpha*新+(1-alpha)*舊
4.開啟新專案Week14-3_timer_alpha_interpolation
程式碼
#include <GL/glut.h>
float angle=0,oldAngle=0,newAngle=0;///宣告變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)
{
if(t<100) glutTimerFunc(50,timer,t+1);///設定下一個鬧鐘
float alpha =t/100.0;///變成float值介於0.00~1.00之間
angle = newAngle*alpha + (1-alpha) * oldAngle;
glutPostRedisplay();///重劃畫面
}
void motion(int x,int y)
{
angle =x;
glutPostRedisplay();///重劃畫面
}
void mouse(int button, int state, int x, int y)
{
if(state==GLUT_DOWN) oldAngle = x;
if(state==GLUT_UP) newAngle = x;
glutPostRedisplay();///重劃畫面
}
void keyboard(unsigned char key, int x, int y)
{
glutTimerFunc(0,timer,0);
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14");
glutDisplayFunc(display);
glutMouseFunc(mouse);///按下去表示起點放開終點
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
按下滑鼠建移動可以更改角度
開啟Final_Project(上週程式碼)
......上週Model不見,導致無法做後面的步驟😭😭😭




沒有留言:
張貼留言