首先備份177行程式碼,接著使用glutSolidSphere來做出打光模型
然後加入glutWireSphere如上圖
程式碼如下:
#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();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutMainLoop();
}
接著加入glutTimerFunc(等多久,timer,t)/ void timer(int t)!!如下圖~:
加入glRotatef使其旋轉並加上glutSolidCube(0.3);///實心方塊,使畫面變成紅底白色方塊旋轉
如下圖~:
稍微變形成細長的綠色手臂,如下圖:
程式碼如下:
#include <GL/glut.h>
float angle=0;
void drawArm1()
{
glPushMatrix();
glScalef(1,0.5,0.5);///細長手臂
glColor3f(0,1,0); glutSolidCube(0.2);///綠色手臂
glPopMatrix();
}
void display(void)
{
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);///旋轉中心移到畫面中心
drawArm1();///綠色手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int diff=2;
void timer(int t)///timer響起時,做需要做的事
{///20:50fps, 30:33fps, 50:20fps, 100:10fps,設太小沒用因為不可能
glutTimerFunc(30,timer,t+1);///起床,先設新鬧鐘
if( angle>90 ) diff=-2;
if( angle<0 ) diff=+2;
angle+=diff;
display();///重畫畫面
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc(3000,timer,0);///(0,0等多久)
glutMainLoop();
}





沒有留言:
張貼留言