☆本週內容☆
程式碼:
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere( 0.3 , 30 , 30); ///畫實心圓球
(半徑 , 縱切 , 橫切)
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 08160023");
glutDisplayFunc(display);
glutMainLoop();
}
講解切割參數
"glutWireSphere(0.3,10,20);" 畫出線條了解切割方向
啟動Timer計時器
啟動程式的瞬間就開始計時,設定1000=>1秒,1秒過後背景亮紅色
程式碼:
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.3,30,30);
glutSwapBuffers();
}
void timer(int t) ///時間函式
{
glClearColor(1,0,0,0); ///清除背景顏色 :紅色
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 08160023");
glutDisplayFunc(display);
glutTimerFunc( 1000 , timer , 0); ///呼叫時間函式
///等待時間 , 呼叫誰 , 參數
glutMainLoop();
}
計時器變化1
到時間後開始旋轉,以設定鬧鐘當例子
程式碼:
#include <GL/glut.h>
int angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidCube(0.3); ///實心圓球
glPopMatrix();
glutSwapBuffers();
}
void timer(int t) ///step1:鬧鐘響起
{
glutTimerFunc(30 ,timer ,t+1); ///step2:馬上設定下一個鬧鐘
angle++; ///step3:起床
display();
} ///又睡著
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 08160023");
glutDisplayFunc(display);
glutTimerFunc(0 , timer , 0); ///睡前第一個鬧鐘
glutMainLoop();
}
計時器變化2
設變數判斷旋轉
程式碼:
#include <GL/glut.h>
int angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidCube(0.3);
glPopMatrix();
glutSwapBuffers();
}
int diff=2; ///宣告一個變數當"改變值"
void timer(int t) ///時間函式
{
glutTimerFunc(20 ,timer ,t+1);
angle+=diff; ///改變值變化反應在旋轉角度上
if(angle>180) ///如果角度>180,轉回去
{
diff=-diff;
}
if(angle<0) ///如果角度<0,再轉回去
{
diff=-diff;
}
display();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 08160023");
glutDisplayFunc(display);
glutTimerFunc(4000 , timer , 0);
glutMainLoop();
}
畫出簡單動畫圖
step1:先畫出圖,註解取名左手(紅)和身體(白):
step2:把旋轉軸放在中央
step3:加入轉動以及調整手臂要放的位置,成功讓左手舉起/放下
程式碼:
#include <GL/glut.h>
int angle=0;
void drawArm() ///畫手臂函式
{
glPushMatrix();
glScalef(1,0.5,0.5);
glColor3f(1,0,0);
glutSolidCube(0.3);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);
glutSolidCube(0.4); ///取名為身體(白色)
glPushMatrix(); ///取名為左手(紅色)
glTranslatef(-0.2,+0.2,0); ///放手臂位置
glRotatef(angle,0,0,1); ///轉動
glTranslatef(-0.15,0,0); ///軸心
drawArm();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int diff=2;
void timer(int t)
{
glutTimerFunc(20 ,timer ,t+1);
angle+=diff;
if(angle>90||angle<0)
{
diff=-diff;
}
display();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 08160023");
glutDisplayFunc(display);
glutTimerFunc(0, timer , 0); ///馬上開始,不等待
glutMainLoop();
}








沒有留言:
張貼留言