zoukankan      html  css  js  c++  java
  • Opengl使用模型视图变换移动光源

    光源绕一个物体旋转,按下鼠标左键时,光源位置旋转。

    #include <GL/glut.h>

    static int spin = 0;
    static GLdouble x_1 = 0.0;
    static GLdouble y_1 = 0.0;
    static GLdouble z_1 = 0.0;
    void init(void)
    {
      glClearColor(0.0,0.0,0.0,0.0);
      glShadeModel(GL_SMOOTH);
      glEnable(GL_LIGHTING);
      glEnable(GL_LIGHT0);
      glEnable(GL_DEPTH_TEST);
    }

    void display(void)
    {
      GLfloat position[] = {0.0,0.0,1.5,1.0};
      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
      glPushMatrix();
      glTranslatef(0.0,0.0,-5.0);

      glPushMatrix();
      glRotated((GLdouble)spin,x_1,y_1,z_1);
      glLightfv(GL_LIGHT0,GL_POSITION,position);
      glTranslated(0.0,0.0,1.5);

      glDisable(GL_LIGHTING);
      glColor3f(0.0,1.0,1.0);
      glutWireCube(1);
      glEnable(GL_LIGHTING);

      glPopMatrix();
      glutSolidTorus(0.275,0.85,8,15);
      glPopMatrix();
      glFlush();
    }

    void reshape(int w, int h)
    {
      glViewport(0,0,(GLsizei)w,(GLsizei)h);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      gluPerspective(40.0,(GLfloat)w/(GLfloat)h,1.0,20.0);

      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
    }

    void mouse(int button, int state, int x, int y)
    {
      switch (button)
      {
      case GLUT_LEFT_BUTTON:
        if (state == GLUT_DOWN)
        {
          x_1 = 1.0;
          y_1 = 0.0;
          z_1 = 0.0;
          spin = (spin + 30) % 360;
          glutPostRedisplay();
        }
      break;
      case GLUT_RIGHT_BUTTON:
        if (state == GLUT_DOWN)
        {
          x_1 = 0.0;
          y_1 = 1.0;
          z_1 = 0.0;
          spin = (spin - 20) % 360;
          glutPostRedisplay();
        }
        break;
      default:
        break;
      }
    }

    int main(int argc,char** argv)
    {
      glutInit(&argc,argv);
      glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
      glutInitWindowSize(500,500);
      glutInitWindowPosition(100,100);

      glutCreateWindow(argv[0]);
      init();
      glutDisplayFunc(display);
      glutReshapeFunc(reshape);

      glutMouseFunc(mouse);
      glutMainLoop();
      return 0;
    }

  • 相关阅读:
    MQTT的编译和安装(mosquitto)
    四、固件分析-固件逆向
    三、固件分析-固件提取
    二、硬件分析-电路分析
    一、硬件分析
    gdb调试
    AES加密中遇到的坑
    多线程中快速定位段错误位置
    理想的数据加密流程
    Centos进入单用户修改root密码
  • 原文地址:https://www.cnblogs.com/herd/p/8541842.html
Copyright © 2011-2022 走看看