2023年5月18日 星期四

咻碰閃week14

 week14

1-1 先安裝git,clone 2023graphicsb到桌面上
















1-2 開新的GLUT專案 week14-1_timer
desktop>2023graphicsb
desktop>2023graphicsb>Final_Project>freeglut

1-3 剪貼week2程式碼

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week14");

    glutDisplayFunc(display);

    glutMainLoop();
}

1-4 設timer轉動茶壺

#include <GL/glut.h>
float angle=0;///step01-1
void timer(int t)///step01-1
{
    glutTimerFunc(500,timer,t+1);///step01-1
    angle+=90;///角度加90度
    glutPostRedisplay();///step01-1重畫畫面
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1);///step01-1
        glutSolidTeapot(0.3);
    glPopMatrix();///step01-1
    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week14");

    glutTimerFunc(3000,timer,0);///step01-1
    glutDisplayFunc(display);

    glutMainLoop();
}

1-5 week14-2_timer_play,按任意鍵開始轉動茶壺

#include <GL/glut.h>
float angle=0;///step01-1
void timer(int t)///step01-1
{
    glutTimerFunc(33,timer,t+1);///step01-1
    angle+=3;///角度小轉得更順
    glutPostRedisplay();///step01-1重畫畫面
}
void keyboard(unsigned char key,int x,int y)///step01-2
{
    glutTimerFunc(0,timer,0);///step01-2
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1);///step01-1
        glutSolidTeapot(0.3);
    glPopMatrix();///step01-1
    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week14");

    glutKeyboardFunc(keyboard);///step01-2
    ///glutTimerFunc(3000,timer,0);///step01-1
    glutDisplayFunc(display);

    glutMainLoop();
}

2-1 開Excel檔


2-2 先備份


2-3 week14-3_timer_alpha_interpolation,用滑鼠鍵盤控制













///week14-3_timer_alpha_interpolation
#include <GL/glut.h>
float angle = 0, newAngle = 0, oldAngle = 0;///step02-2 宣告 新角度、舊角度
float oldX = 0;///step02-2 舊的x座標
void timer(int t)
{
    if(t<100) glutTimerFunc(33,timer,t+1);
    float alpha = t/100.0;///step02-2 所以alpha介於0.0~1.0之間
    angle = alpha*newAngle + (1-alpha)*oldAngle;///step02-2
    glutPostRedisplay();
}
void keyboard(unsigned char key,int x,int y)
{
    glutTimerFunc(0,timer,0);
}
void mouse(int button,int state,int x,int y){
    if(state==GLUT_DOWN) oldAngle = angle;///step02-2
    if(state==GLUT_UP) newAngle = angle;///step02-2
    oldX = x;///step02-2
    glutPostRedisplay();///step02-2更新畫面
}
void motion(int x,int y){
    angle += x-oldX;///step02-2
    oldX = x;///step02-2
    glutPostRedisplay();///step02-2更新畫面
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week14");

    glutMouseFunc(mouse);///step02-2
    glutMotionFunc(motion);///step02-2
    glutKeyboardFunc(keyboard);///step01-2
    ///glutTimerFunc(3000,timer,0);///step01-1
    glutDisplayFunc(display);

    glutMainLoop();
}








沒有留言:

張貼留言