本文主要是介绍《计算机图形学》转动的机器人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近一直在弄机器人,好晕,画个机器人,让机器人转起来,神奇.....
#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 2void body(){glColor3f(0,1,0);glPushMatrix();glScalef(BASE_WIDTH, BASE_HEIGHT, BASE_WIDTH);//3.0,5.0,3.0glRotatef(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.0glScalef(HEAD_WIDTH, HEAD_HEIGHT, HEAD_WIDTH);//3.0,3.0,3.0glRotatef(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 + 3glScalef(UPPER_LEG_WIDTH, UPPER_LEG_HEIGHT, UPPER_LEG_WIDTH);//1.0,5.0,1.0glRotatef(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 + 3glScalef(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;
}
这篇关于《计算机图形学》转动的机器人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!