一。計時器
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
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();
}
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








沒有留言:
張貼留言