2023年5月17日 星期三

Week14切換關節

 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不見,導致無法做後面的步驟😭😭😭

沒有留言:

張貼留言