glBegin对照明有什么影响吗?

时间:2013-04-29 11:05:43

标签: c++ opengl

我正在使用opengl进行一个项目(我是初学者),我在照明方面遇到了麻烦。

我有2个绘图方法:一个用于渲染,另一个用于拾取刻面。 渲染方法似乎没问题,因为当我评论拾取方法时,它正常工作。我尝试了一些事情,发现它是glBegin()调用(在“pick method”中)引发了这个问题:glBegin对ligthing有什么影响吗?

我按照这样设置灯光:

void GLView::createLight(int LightID, const Vector3 &Position, const Vector3 &Color, const float* ambient)
{
  glLightfv(LightID,GL_AMBIENT, ambient);
  glLightfv(LightID,GL_POSITION,&Position.v[0]);
  glLightfv(LightID,GL_DIFFUSE,&Color.v[0]);
  glEnable(LightID);
}


void GLView::setLights()
{
  float diffuse[]={1,1,1,1};
  float lmodel_ambient[4] = {0.5f, 0.5f, 0.5f, 0.5f};  
  float ambient_0[] = {0.0f,0.0f,0.0f,1.0f};

  glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,&diffuse[0]);
  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,1);
  createLight(GL_LIGHT0,Vector3(0,0.3,1),Vector3(0.7,0.7,0.7),&ambient_0[0]);
  createLight(GL_LIGHT1,Vector3(-1,0,0.3),Vector3(0.4,0.2,0),&ambient_0[0]);
  createLight(GL_LIGHT2,Vector3(1,-0.2,0.1),Vector3(0,0.05,0.15),&ambient_0[0]);
}

绘图方法:

void GLView::draw(TRenderStyle RenderStyle)
{
  int W=width();
  int H=height();
  float WW=W/2;
  float HH=H/2;
  float Zoom=camera->Zoom*std::min(width(),height());
  float Lens=HH/tan(FieldOfView/360*acos(-1));

  glEnable(GL_NORMALIZE);
  glEnable(GL_CULL_FACE);
  glDisable(GL_FOG);
  glDisable(GL_BLEND);
  glDisable(GL_LIGHTING);
  glColorMask(true,true,true,true);

switch (RenderStyle)
  {
   case rsScene:{ 
       //rendering 
   }
   break;
   case rsMouseWindow: //for picking facets
   case rsMouseAction:{
       glBegin(GL_TRIANGLES);   //it's working fine if I comment these 2 lines
       glEnd();
   }
   break;

  }

}

我知道这是一个模糊的问题,但它真的看起来像glBegin正在影响照明,我不知道该怎么办。

感谢您的帮助。

***编辑:问题是当调用glBegin()时,只有最后一个初始化灯正在工作。

0 个答案:

没有答案