《计算机图形学》转动的机器人

最近一直在弄机器人,好晕,画个机器人,让机器人转起来,神奇.....


#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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值