上個禮拜還不習慣沒有很跟得上,但我相信這禮拜我可以的拉
首先打開02的程式碼檔複習上禮拜丟打光、貼圖、讀模型的跟等等要丟的程式碼
阿下面的程式碼有些是老朋友了,自己要記得蝦
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glutSolidSphere(0.3,30,30);這個是實心的
glutWireSphere(0.3,30,30);///線框
glutSwapBuffers();
}
void timer(int t){///timer響起就做
glClearColor(1,0,0,0);///背景 現在是紅色
display();///重劃畫面
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc(3000,timer,0);
glutMainLoop();
}
glutSolidSphere(0.3,30,30);這行的數字是啥
0.3半徑30縱切30橫切
void timer(int t){///timer響起就做
glClearColor(1,0,0,0);///背景 現在是紅色
display();///重劃畫面
} 時間到做以上的事
下面是進階版 時間到就轉起來
程式碼:
#include <GL/glut.h>
float 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){ ///響起就做
glutTimerFunc(30, timer, t+1);
glClearColor(1,0,0,0);///顏色
angle++;///旋轉我!
display();///這行加了才會跑
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc( 3000, timer, 0 );///等待的時間
glutMainLoop();
}
下面這行呢只有一點點不一樣 用圖表現不出來所以用講的
#include <GL/glut.h>
float 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(30, timer, t+1);
glClearColor(1,0,0,0);///顏色
if(angle>90) diff=-2; 這段就是一直往左加角度
if(angle<0) diff=+2; 如果到90度了就扣角度轉回 然後一直重複
angle += diff;
display();///這行加了才會跑
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc( 3000, timer, 0 );///等待的時間
glutMainLoop();
}
下面這個只是變成白方塊固定,左邊加綠長
方形讓他轉動 新增的程式碼不多我就不全
貼了
#include <GL/glut.h>
float angle=0;
void drawArml(){
glPushMatrix();
glScalef(1,0.5,0.5);///細長的手臂
glColor3f(0,1,0);glutSolidCube(0.2);///綠色手臂
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.1,0,0);///旋轉中心(關節)移到畫面中心
drawArml();///畫手臂
glPopMatrix();
glPopMatrix();
///glutSolidSphere(0.3,30,30);
///glutWireSphere(0.3,30,30);
glutSwapBuffers();
}



沒有留言:
張貼留言