2023年5月18日 星期四

*mian𓃹 Week14

一。計時器 




step1. 安裝Git,開啟Git Bash

-cd desktop 到桌面
-git clone  http://github.com/mian9116/2022graphicsb 
-cd 2022graphicsb 
-start . 開啟檔案總管



step2開啟新的GLUT專案名為week14-1_timer後打上茶壺程式碼


#include <GL/glut.h>
void display()

{
    glutSolidTeapot(0.3);

    glutSwapBuffers();
}

int main(int argc,char** argv)

{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week14");

    glutDisplayFunc(display);

    glutMainLoop();

}


step3. 修改程式碼,使茶壺每隔幾秒旋轉90度

#include <GL/glut.h>
float angle=0;
void timer(int t)
{
    glutTimerFunc(500,timer,t+1);
    angle+=90;
    glutPostRedisplay();
}

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");

    glutTimerFunc(3000,timer,0);

    glutDisplayFunc(display);

    glutMainLoop();

}


step4開啟新的GLUT專案名為week14-2_timer_play並複製week14-1後修改程式碼,使茶壺在按下按鍵後持續旋轉

💡按越多次轉越快→啟動了很多次
#include <GL/glut.h>
float angle=0;
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);
}

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");

    glutKeyboardFunc(keyboard);
    //glutTimerFunc(3000,timer,0);

    glutDisplayFunc(display);

    glutMainLoop();
}


step5. 打開git先上傳(避免當機!)
-git config --global user.email yuanm.2775@gmail.com
-git config --global user.name mian9116
-git add .
-git commit -m week14
-git push

二。內插


step1. 使用公式,有一個Alpha值介於0.0~1.0間,使用公式alpha*新+(1-alpha)*舊就可以把中間值推算出來

step2. 複製week14-2程式,修改程式碼使其可以自由轉動

#include <GL/glut.h>
float angle=0,NewAngle=0,OldAngle=0,oldX=0;
void timer(int t)
{
    if(t<100) glutTimerFunc(33,timer,t+1);
    float alpha=t/100.0;
    angle=alpha*NewAngle+(1-alpha)*OldAngle;
    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;
    if(state==GLUT_UP)NewAngle=angle;
    oldX=x;
    glutPostRedisplay();
}
void motion(int x,int y)
{
    angle+=x-oldX;
    oldX=x;
    glutPostRedisplay();
}
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");
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutMotionFunc(motion);
    glutKeyboardFunc(keyboard);
    glutDisplayFunc(display);
    glutMainLoop();
}

step3. 同步驟1-5,打開git先上傳(避免當機!)

-git config --global user.email yuanm.2775@gmail.com
-git config --global user.name mian9116
-git add .
-git commit -m week14
-git push

三。


step1. 打開上周的Final Project

沒有留言:

張貼留言