OPENGL的矩阵堆栈,还是挺好用的.基于状态机制实现的,很不错啊....回家该刷刷鞋垫了,太味儿了..~~
刚才看了个南朝鲜的一个"热辣"MV,感觉这么无聊呢...不经意间,就远离了这些无聊没劲的事物,他们可真够无聊的,玩那些东西.他们不亡国,谁亡国?
#include <gl/glut.h>
#include <stdlib.h>
static int shoulder = 0 ;
static int elbow = 0 ;
void Init(void)
{
glClearColor(0, 0, 0, 0) ;
glShadeModel(GL_FLAT) ;
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT) ;
glPushMatrix();
glTranslatef (-1.0, 0.0, 0.0);
glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
glTranslatef (1.0, 0.0, 0.0);
glPushMatrix();
glScalef (2.0, 0.4, 1.0);
glutWireCube (1.0);
glPopMatrix();
glTranslatef (1.0, 0.0, 0.0);
glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
glTranslatef (1.0, 0.0, 0.0);
glPushMatrix();
glScalef (2.0, 0.4, 1.0);
glutWireCube (1.0);
glPopMatrix();
glPopMatrix() ;
glutSwapBuffers() ;
}
void Reshape(int width, int height)
{
glViewport(0, 0, (GLsizei)width, (GLsizei)height) ;
glMatrixMode(GL_PROJECTION) ;
glLoadIdentity() ;
gluPerspective(65, (GLfloat)width / (GLfloat)height, 1, 20) ;
glMatrixMode(GL_MODELVIEW) ;
glLoadIdentity() ;
glTranslatef(0, 0, -5) ;
}
void Keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 's':
case 'S':
shoulder = (shoulder + 5) % 360 ;
glutPostRedisplay() ;
break ;
case 'e':
case 'E':
elbow = (elbow + 5) % 360;
glutPostRedisplay() ;
break ;
case 27:
exit(0) ;
default:
break ;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
Init ();
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);
glutMainLoop();
return 0;
}