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

  • 相关阅读:
    sharedCopy收藏夹代码
    执行EXE程序出现unable to locate suitable Java runtime Environment on this machine java解决方法
    点击combo激活下拉
    解决方案
    C++Builder中开发Activex
    BCB常见文件类型说明
    三款Json查看小工具
    oracel故障数据恢复 ora01033错误解决过程.
    fushioncharts破解
    基于注解的表单生成
  • 原文地址:https://www.cnblogs.com/herd/p/8541842.html
Copyright © 2020-2023  润新知