• 3995阅读
  • 3回复

我想固定OPENGL的光源 [复制链接]

上一主题 下一主题
离线ffii4455
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-24
我画了一个正方体,然后在(0,0,2)的地方放了光源。我想把这个光源固定住,旋转立方体的时候光源只照射眼睛看到的这个面。但我的程序的光源却跟着立方体一起旋转了。。。。现在就是,刚开始照亮了正方体的面对我的这个面,当我旋转正方体的时候,光会越来越暗。等到第一个面赚回来的时候,光线又正常了,求解。
主要代码如下:

  1. void opengl::initializeGL()
  2. {
  3.     loadGLTextures();
  4.     glEnable( GL_TEXTURE_2D );
  5.     glShadeModel(GL_SMOOTH);
  6.     glClearColor(0.0, 0.0, 0.0, 1);
  7.     glClearDepth(1.0);
  8.     glEnable(GL_DEPTH_TEST);
  9.     glEnable(GL_LEQUAL);
  10.     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  11. }
  12. void opengl::paintGL()
  13. {
  14. glPushMatrix();
  15.     glLoadIdentity();
  16.     glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
  17.     glEnable(GL_LIGHT0);
  18.     glEnable(GL_LIGHTING);
  19.     glPopMatrix();
  20.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  21.     glLoadIdentity();
  22.     glTranslatef( 0.0,  0.0, zoom );
  23.     glRotatef(rSx, 0.0, 1.0, 0.0);
  24.     //    glTranslatef( 0.0,  -0.5, -3.0 );
  25.     glRotatef(rSy, 1.0, 0.0, 0.0);
  26.     //   glLoadIdentity();
  27.     glTranslatef( -0.5, -0.5, 0.5 );
  28.     glBindTexture( GL_TEXTURE_2D, texture[0] );
  29.     glBegin( GL_QUADS );
  30.     glColor3f(1.0, 1.0, 1.0);
  31.     glTexCoord2f( 0.0, 0.0 );  glVertex3f(0.0,0.0,0.0);
  32.     glTexCoord2f( 1.0, 0.0 );  glVertex3f(1.0,0.0,0.0);
  33.     glTexCoord2f(1.0,1.0);  glVertex3f(1.0,1.0,0.0);
  34.     glTexCoord2f(0.0,1.0);   glVertex3f(0.0,1.0,0.0);
  35.      //  glColor3f(0.0,1.0,0.0);
  36.     glTexCoord2f( 0.0, 0.0 );glVertex3f(1.0,0.0,0.0);
  37.     glTexCoord2f( 1.0, 0.0 ); glVertex3f(1.0,0.0,-1.0);
  38.     glTexCoord2f(1.0,1.0);  glVertex3f(1.0,1.0,-1.0);
  39.     glTexCoord2f(0.0,1.0); glVertex3f(1.0,1.0,0.0);
  40.     // glColor3f(0.0,0.0,1.0);
  41.     glTexCoord2f( 0.0, 0.0 );glVertex3f(1.0,0.0,-1.0);
  42.     glTexCoord2f( 1.0, 0.0 );glVertex3f(0.0,0.0,-1.0);
  43.     glTexCoord2f(1.0,1.0);glVertex3f(0.0,1.0,-1.0);
  44.     glTexCoord2f(0.0,1.0);glVertex3f(1.0,1.0,-1.0);
  45.     //glColor3f(1.0,1.0,0.0);
  46.     glTexCoord2f( 0.0, 0.0 );glVertex3f(0.0,0.0,-1.0);
  47.     glTexCoord2f( 1.0, 0.0 );glVertex3f(0.0,0.0,0.0);
  48.     glTexCoord2f(1.0,1.0); glVertex3f(0.0,1.0,0.0);
  49.     glTexCoord2f(0.0,1.0);glVertex3f(0.0,1.0,-1.0);
  50.     glTexCoord2f( 0.0, 0.0 );glVertex3f(0.0, 1.0, 0.0);
  51.     glTexCoord2f( 1.0, 0.0 );glVertex3f(1.0, 1.0, 0.0);
  52.     glTexCoord2f(1.0,1.0);glVertex3f(1.0, 1.0, -1.0);
  53.     glTexCoord2f(0.0,1.0);glVertex3f(0.0, 1.0, -1.0);
  54.     glTexCoord2f( 0.0, 0.0 );glVertex3f(0.0, 0.0, -1.0);
  55.     glTexCoord2f( 1.0, 0.0 );glVertex3f(1.0, 0.0, -1.0);
  56.     glTexCoord2f(1.0,1.0);glVertex3f(1.0, 0.0, 0.0);
  57.     glTexCoord2f(0.0,1.0);glVertex3f(0.0, 0.0, 0.0);
  58.     glEnd();
  59.     
  60.     //rS+=5;
  61. }
  62. void opengl::resizeGL(int w, int h)
  63. {
  64.     if(h == 0)
  65.         h = 1;
  66.     glViewport(0, 0, GLint(w), GLint(h));
  67.     glMatrixMode(GL_PROJECTION);
  68.     glLoadIdentity();
  69.     gluPerspective(45.0, w/h, 0.1, 100.0);
  70.     glMatrixMode( GL_MODELVIEW );
  71.     glLoadIdentity();
  72. }














离线jorneyr

只看该作者 1楼 发表于: 2011-10-24
在paintGL函数中先设定位置,然后再旋转场景
离线ffii4455

只看该作者 2楼 发表于: 2011-10-24
回 1楼(jorneyr) 的帖子
我就是这样做的啊~
离线ffii4455

只看该作者 3楼 发表于: 2011-10-26
高手们快来啊~~~~
快速回复
限100 字节
 
上一个 下一个