Week14-1
1.首先安裝git並用git bash下載 2023graphicsb 資料夾到桌面
2.用codeblocks創建新GLUT專案,並將創建路徑改為2023graphicsb目錄內,freeglut指定為final_project裡的freeglut
3.利用程式碼timer讓茶壺有時間間隔自動旋轉的功能
程式碼:
#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();
}
Week14-2
1.沿用week14-1的程式碼進行按鍵加裝,追加keyboard控制
2.在void timer處可更改數值以改變茶壺的旋轉速度
Week14-3
0.介紹角度計算公式
1.沿用week14-2的程式,創建新的glut專案,並追加滑鼠【mouse】控制
程式碼:
#include<GL/glut.h>
float angle = 0,newangle=0,oldangle=0;
float 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");
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
//glutTimerFunc(3000,timer,0);
glutDisplayFunc(display);
glutMainLoop();
}
2.測試茶壺是否會隨著滑鼠旋轉,且按下按鍵會有旋轉反應
Week14-4 Final Project
1.加載之前未完成的final project
2.追加顏色程式碼,讓對應身體部位被按鍵指定時會冒紅色表示有反應
3.執行程式測行按鍵測試
沒有留言:
張貼留言