/******************************************************
*robot.cpp
*基于opengl的机械手臂示例代码
*s:机械臂逆时针旋转
*S:机械臂顺时针旋转
*e:腕部逆时针旋转
*E:腕部顺时针旋转
*******************************************************/
#include <GL/glut.h>

static int shoulder = 0;
static int elbow = 0;

void init(void)
{
  glClearColor(0.0,0.0,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 w,int h)
{
  glViewport(0,0,(GLsizei)w,(GLfloat)h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(65.0,(GLfloat)w/(GLfloat)h,1.0,20.0);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glTranslatef(0.0,0.0,-5.0);
}

void keyboard(unsigned char key, int x, int y)
{
  switch (key) {
  case 's':/*s key rotates at shoulder*/
    shoulder = (shoulder + 5) % 360;
    glutPostRedisplay();
    break;
  case 'S':
    shoulder = (shoulder - 5) % 360;
    glutPostRedisplay();
    break;
  case 'e':
    elbow = (elbow + 5) % 360;
    glutPostRedisplay();
    break;
  case 'E':
    elbow = (elbow - 5) % 360;
    glutPostRedisplay();
    break;
  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;
}

最新文章

  1. 【Win10 UWP】QQ SDK(一):SDK基本使用方法
  2. Elasticsearch 相关名词理解
  3. ADO.NET 拾遗
  4. cf509B Painting Pebbles
  5. String的构造函数、析构函数和赋值函数
  6. Asp.Net2.0下C#环境 Login控件实现用户登录
  7. JSP标准标签库(JSTL)--国际化标签库 fmt
  8. python自学基础1week
  9. python之matplotlib绘图基础
  10. 团队作业8——Beta版本冲刺计划及安排
  11. Asp.NetCore+Microsoft.AspNetCore.SignalR前后端分离
  12. 从零开始 —— Canvas(一)
  13. url加密和解密
  14. django之模型层(model)--多表相关操作(图书管理小练习)
  15. Unity3D MonoBehaviour的生命周期(lifecycle)
  16. everything结果出现文件找不到
  17. ubuntu下安装CAJ阅读器
  18. Navicat for MySQL 安装和破解(完美)
  19. Ldap-crack-test?
  20. Markdown总结整理

热门文章

  1. 基于Seajs的可控台球碰撞游戏
  2. Django 框架概况
  3. Gym - 101635K:Blowing Candles (简单旋转卡壳,求凸包宽度)
  4. The Suspects (并查集)
  5. LeetCode 293. Flip Game
  6. 取余运算(mod)(分治)
  7. Python函数-enumerate()
  8. c++运行时决定数组大小 variable-length array
  9. Kerberos的启动和关闭
  10. Python 函数之迭代器和生成器