码迷,mamicode.com
首页 > 移动开发 > 详细

Opengl使用模型视图变换移动光源

时间:2018-03-10 21:51:28      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:create   ota   gpo   tor   ==   smooth   cti   flush   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;
}

 

Opengl使用模型视图变换移动光源

标签:create   ota   gpo   tor   ==   smooth   cti   flush   opengl   

原文地址:https://www.cnblogs.com/herd/p/8541842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!