最近一直在弄机器人,好晕,画个机器人,让机器人转起来,神奇.....
#include <math.h>
#include <GL/glut.h>
static GLfloat theta[] = {0.0,0.0,0.0};
#define HEAD_HEIGHT 4.0
#define HEAD_WIDTH 4.0
#define BASE_HEIGHT 8.0
#define BASE_WIDTH 6.0
#define LOWER_LEG_HEIGHT 8.0
#define LOWER_LEG_WIDTH 2
#define UPPER_LEG_HEIGHT 8.0
#define UPPER_LEG_WIDTH 2
void body(){
glColor3f(0,1,0);
glPushMatrix();
glScalef(BASE_WIDTH, BASE_HEIGHT, BASE_WIDTH);//3.0,5.0,3.0
glRotatef(theta[1], 0.0, 1.0, 0.0);
glutSolidCube(2.0);
glPopMatrix();
}
void head(){
glColor3f(0,0,1);
glPushMatrix();
glTranslatef(0, (BASE_HEIGHT+HEAD_HEIGHT), 0.0);//5.0, 3.0
glScalef(HEAD_WIDTH, HEAD_HEIGHT, HEAD_WIDTH);//3.0,3.0,3.0
glRotatef(theta[1], 0.0, 1.0, 0.0);
glutSolidCube(2.0);
glPopMatrix();
}
void leftleg(){
glColor3f(1,0,0);
glPushMatrix();
glTranslatef(-3, -(BASE_HEIGHT+HEAD_HEIGHT), 0.0);//5 + 3
glScalef(UPPER_LEG_WIDTH, UPPER_LEG_HEIGHT, UPPER_LEG_WIDTH);//1.0,5.0,1.0
glRotatef(theta[1], 0.0, 1.0, 0.0);
glutWireCube(2.0);
glPopMatrix();
}
void rightleg(){
glColor3f(1,0,0);
glPushMatrix();
glTranslatef(3, -(BASE_HEIGHT+HEAD_HEIGHT), 0.0);//5 + 3
glScalef(LOWER_LEG_WIDTH, LOWER_LEG_HEIGHT, LOWER_LEG_WIDTH);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glutWireCube(2.0);
glPopMatrix();
}
void leftarm(){
glColor3f(1,1,1);
glPushMatrix();
glTranslatef(-7, 2.6, 0.0);
glScalef(2.5, 5, 2.5);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glutWireCube(2.0);
glPopMatrix();
}
void rightarm(){
glColor3f(1,1,1);
glPushMatrix();
glTranslatef(7, 2.6, 0.0);
glScalef(2.5, 5, 2.5);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glutWireCube(2.0);
glPopMatrix();
}
void robot()
{
glPushMatrix();
glTranslatef(theta[2],0,0);
head();
body();
leftleg();
rightleg();
leftarm();
rightarm();
glPopMatrix();
}
void initRendering() {
glEnable(GL_DEPTH_TEST);
}
void handleResize(int w, int h) {
if(h == 0) h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho (-50.0f, 50.0f, -50.0f, 50.0f*h/w, -10.0, 10.0);
else
glOrtho (-50.0f, 50.0f*w/h, -50.0f, 50.0f, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
robot();
glutSwapBuffers();
}
void update(int value) {
theta[0] += 2.0f;
if (theta[0] > 360)
theta[0] -= 360;
theta[1] +=10.0f;
if (theta[1] > 360)
theta[1] -= 360;
theta[2] += 1.0f;
if (theta[2] > 360)
theta[2] -= 360;
glutPostRedisplay();
glutTimerFunc(1000, update, value+1);
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100,100);
glutInitWindowSize(500, 500);
glutCreateWindow("转动的机器人");
initRendering();
glutDisplayFunc(drawScene);
glutReshapeFunc(handleResize);
glutTimerFunc(1000, update, 1);
glutMainLoop();
return 0;
}